Файловая структура практически любого проекта на PHP выглядит так:
src/ # исходные файлы
tests/
composer.json
composer.lock
.git
README.md
Директория src предназначена для хранения исходного кода программы (сайта). Ее структура НЕ плоская — внутри src могут находиться другие директории с PHP файлами внутри них:
my-site/
src/
Formatters/
Pretty.php
Generator.php
Возникает вопрос в том, как отображать структуру пространств имен на файловую структуру. В прошлом уроке мы говорили о том, что в PHP пространства имен появились не с самого начала, что оставило свой отпечаток. Если посмотреть на другие языки, например, python или java, то там структура пакетов "намертво" связана с файловой структурой. Поэтому такой проблемы в этих языках нет. В PHP это правило задано на уровне соглашений.
Если взять файл Pretty.php, то его пространство имён следовало бы назвать FormattersPretty
, что отражает вложенность Formatters/Pretty
. Но можно сделать еще лучше — использовать вложенные пространства имён:
<?php
namespace Formatters\Pretty;
function render($data)
{
// some code
}
Возможность вкладывать пространства имён друг в друга позволяет думать о пространствах имен как о файловой структуре, где пространства имён — это директории, а функции — это файлы. Кроме вложенности, такие пространства имён ничем не отличаются от обычных пространств имён:
<?php
namespace Generator;
function generate($data)
{
return \Formatters\Pretty\render($data);
}
Описанная выше схема именования пространств помогает избавиться от большого числа проблем, связанных с коллизиями. Но все же этого недостаточно. Дело в том, что теперь сами пространства становятся уникальными и не должны пересекаться. А пространство с именем Generator
, скорее всего, будет периодически встречаться в разных библиотеках (так как это слишком общее слово). Поэтому каждый проект или пакет принято помещать в одно общее пространство и не загрязнять глобальное пространство множеством пространств имён. Это название выбирается на основе названия самого проекта — той директории, внутри которой лежит src. В нашей структуре директорий это my-site. Это значит, что общим пространством для всех файлов внутри src будет My\Site
. Если имя директории содержит дефис, как в примере, то в таком случае он заменяется на \
(обратный слеш), а каждое слово начинается с заглавной буквы:
<?php
// src/Formatters/Pretty.php
namespace My\Site\Formatters\Pretty;
// some code
<?php
// src/Generator.php
namespace My\Site\Generator;
// some code
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт