Определить пространства имен довольно просто. В верхней части файла, сразу после открывающего тега PHP, используется ключевое слово пространства имен, за которым следует виртуальный каталог по вашему выбору. Этот виртуальный каталог может действовать как единый каталог или иметь несколько подкаталогов в глубину. Мы также рассмотрим использование ключевого слова use. Помните ключевое слово use? Ага, возвращается.

Подведение итогов. Просмотрите предыдущую статью и код. Мы будем строить из нашего предыдущего кода.





Давайте начнем с создания нашего тестового файла.

Код выводит Lamborghini Murcielago 1999 года выпуска.

До сих пор мы не определили никаких пространств имен. Это скоро изменится. Если вы откроете какой-либо код, который у нас есть в настоящее время, вы заметите, что нигде нет ключевого слова namespace, что означает, что пространства имен не определены. В противном случае ключевое слово namespace располагалось бы сразу после открывающего тега ‹?php.

Определить пространства имен довольно просто. Давайте сделаем что-нибудь для нашего тестового кода выше. Я собираюсь определить пространство имен CoolCars.

Это действительно так просто… и мы взломали код. Наш редактор автоматически начинает действовать и говорит, что класс Lamborghini не определен.

И конечно же, если мы попытаемся запустить код, мы получим ошибку. Что же произошло? Итак, мы определили пространства имен CoolCars, и код внутри этого файла принадлежит этому пространству имен (виртуальному каталогу).

Все другие наши файлы, для которых не определено пространство имен, технически расположены в глобальном пространстве. Это почти как если бы мы создали подкаталог CoolCars, который содержит наш тестовый файл, а все остальное находится за пределами этого каталога.

Когда мы пытаемся выполнить require_once("Lamborghini"), PHP просматривает виртуальный каталог CoolCars. Он не может найти его там, поскольку Lamborghini в настоящее время находится в глобальном пространстве имен.

Как быстро это исправить? Просто добавьте обратную косую черту к классу Lamborghini. Он говорит PHP искать в глобальном каталоге.

Тестирование нашего кода дает результат, который мы искали: Lamborghini Murcielago 1999 года выпуска. Кажется хакерским способом сделать это. Есть ли другой способ? Есть конечно. Давайте добавим Lamborghini в пространство имен CoolCars.

И мы снова взломали код. Думаю, вы знаете, что будет дальше. Во-первых, мы могли бы добавить \ перед Car, где он расширяется.

class Lamborghini extends \Car

Или мы могли бы добавить Car в пространство имен CoolCars.

Мы еще не закончили. Класс Car расширяет класс Vehicle и использует свойства Transmission и Engine. Все они должны быть добавлены в одно и то же пространство имен.

Теперь, когда все находится в одном пространстве имен, если мы обновим наш код, PHP не будет жаловаться и отобразится желаемый результат.

Что, если мы удалим пространство имен CoolCars из тестового кода? Теперь наша структура будет выглядеть так.

Класс Lamborghini находится не в том же пространстве имен, что и наш тестовый код. Быстрое исправление: добавьте пространство имен CoolCars перед классом Lamborghini во время создания экземпляра.

Есть еще один способ. Всегда есть другой путь. Мы собираемся использовать ключевое слово use , чтобы сделать его немного чище. В начале файла мы можем сказать, что этот файл будет использовать класс CoolCars\Lamborghini.

Он просто говорит, что этот файл будет использовать класс Lamborghini из пространства имен CoolCars. Это заменило наш вызов Namespace\Class во время создания экземпляра. Теперь мы можем использовать только наш класс Lamborghini, как и раньше.

Это хорошая остановка. В следующей статье мы рассмотрим подпространства имен.



Дино Кайич в настоящее время является руководителем отдела информационных технологий в компаниях LSBio (LifeSpan BioSciences, Inc.), Absolute Antibody, Kerafast, Everest BioTech, Nordic MUbio и Exalpha. Он также является генеральным директором MyAutoSystem. Он имеет более чем десятилетний опыт разработки программного обеспечения. У него есть B.S. в области компьютерных наук и несовершеннолетнего в области биологии. Его опыт включает в себя создание приложений для электронной коммерции на уровне предприятия, разработку программного обеспечения на основе исследований и содействие распространению знаний посредством письма.

Вы можете связаться с ним в LinkedIn, подписаться на него в Instagram, подписаться на его блог или подписаться на его публикацию на Medium.

Прочитайте все истории Дино Каджика (и тысяч других авторов на Medium). Ваш членский взнос напрямую поддерживает Дино Кайича и других писателей, которых вы читаете. Вы также получите полный доступ ко всем историям на Medium.