0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы продолжим изучать пространства имен и подробнее поговорим о вложенности в них.</p>
1
<p>В этом уроке мы продолжим изучать пространства имен и подробнее поговорим о вложенности в них.</p>
2
<p>Файловая структура практически любого проекта на PHP выглядит так:</p>
2
<p>Файловая структура практически любого проекта на PHP выглядит так:</p>
3
<p>Директория<em>src</em>предназначена для хранения исходного кода программы или сайта.</p>
3
<p>Директория<em>src</em>предназначена для хранения исходного кода программы или сайта.</p>
4
<p>Ее структура НЕ плоская - внутри<em>src</em>могут находиться другие директории с PHP-файлами внутри них:</p>
4
<p>Ее структура НЕ плоская - внутри<em>src</em>могут находиться другие директории с PHP-файлами внутри них:</p>
5
<p>Разберемся, как отображать структуру пространств имен на файловую структуру.</p>
5
<p>Разберемся, как отображать структуру пространств имен на файловую структуру.</p>
6
<p>В прошлом уроке мы говорили, что в PHP пространства имен появились не с самого начала, что оставило свой отпечаток. В Python, Java и других языках структура пакетов тесно связана с файловой структурой. Поэтому такой проблемы в этих языках нет. В PHP это правило задано на уровне<strong>соглашений</strong>.</p>
6
<p>В прошлом уроке мы говорили, что в PHP пространства имен появились не с самого начала, что оставило свой отпечаток. В Python, Java и других языках структура пакетов тесно связана с файловой структурой. Поэтому такой проблемы в этих языках нет. В PHP это правило задано на уровне<strong>соглашений</strong>.</p>
7
<p>Если взять файл<em>Pretty.php</em>, то его пространство имен следовало бы назвать FormattersPretty, что отражает вложенность Formatters/Pretty.</p>
7
<p>Если взять файл<em>Pretty.php</em>, то его пространство имен следовало бы назвать FormattersPretty, что отражает вложенность Formatters/Pretty.</p>
8
<p>Но можно сделать еще лучше - использовать<strong>вложенные пространства имен</strong>:</p>
8
<p>Но можно сделать еще лучше - использовать<strong>вложенные пространства имен</strong>:</p>
9
<p>Возможность вкладывать пространства имён друг в друга позволяет думать о пространствах имен как о файловой структуре, где пространства имен - это директории, а функции - это файлы.</p>
9
<p>Возможность вкладывать пространства имён друг в друга позволяет думать о пространствах имен как о файловой структуре, где пространства имен - это директории, а функции - это файлы.</p>
10
<p>Кроме вложенности, такие пространства имен ничем не отличаются от обычных пространств имен:</p>
10
<p>Кроме вложенности, такие пространства имен ничем не отличаются от обычных пространств имен:</p>
11
<p>Описанная выше схема именования пространств помогает избавиться от большого числа проблем, связанных с коллизиями. Но все же этого недостаточно.</p>
11
<p>Описанная выше схема именования пространств помогает избавиться от большого числа проблем, связанных с коллизиями. Но все же этого недостаточно.</p>
12
<p>Дело в том, что теперь сами пространства становятся уникальными и не должны пересекаться. Но при этом пространство с именем Generator может периодически встречаться в разных библиотеках - потому что это слишком общее слово.</p>
12
<p>Дело в том, что теперь сами пространства становятся уникальными и не должны пересекаться. Но при этом пространство с именем Generator может периодически встречаться в разных библиотеках - потому что это слишком общее слово.</p>
13
<p>Поэтому каждый проект или пакет принято помещать в одно общее пространство и не загрязнять глобальное пространство множеством пространств имен. Это название выбирается на основе названия самого проекта - той директории, внутри которой лежит<em>src</em>.</p>
13
<p>Поэтому каждый проект или пакет принято помещать в одно общее пространство и не загрязнять глобальное пространство множеством пространств имен. Это название выбирается на основе названия самого проекта - той директории, внутри которой лежит<em>src</em>.</p>
14
<p>В нашей структуре директорий мы выбрали<em>my-site</em>. Это значит, что общим пространством для всех файлов внутри<em>src</em>будет My\Site. Если имя директории содержит дефис, то он заменяется на обратный слэш \, а каждое слово начинается с заглавной буквы:</p>
14
<p>В нашей структуре директорий мы выбрали<em>my-site</em>. Это значит, что общим пространством для всех файлов внутри<em>src</em>будет My\Site. Если имя директории содержит дефис, то он заменяется на обратный слэш \, а каждое слово начинается с заглавной буквы:</p>
15
15