HTML Diff
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