Рубрики
Uncategorized

Базовый анализ использования пространства имен в углубленном изучении PHP

Автор оригинала: David Wong.

Эта статья иллюстрирует основное использование пространств имен в расширенном обучении PHP. Поделитесь для вашей справки следующим образом:

Предисловие

Пространство имен в языках программирования-это особая абстракция области видимости. Он представляет видимую область идентификатора. Идентификатор может быть определен в нескольких пространствах имен, и его значение в разных пространствах имен не имеет значения. Таким образом, любые идентификаторы могут быть определены в новом пространстве имен, и они не конфликтуют ни с какими существующими идентификаторами, поскольку существующие определения находятся в других пространствах имен.

Пространства имен также используются в PHP, где идентификатор, управляющий видимостью, обычно относится к классам и функциям.

I. Основание пространства имен PHP

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

Начиная с PHP 5.3, было введено понятие пространства имен, то есть пространства имен. Имена классов в одном и том же пространстве имен не могут повторяться, и классы с одинаковыми именами могут существовать в разных пространствах имен.

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

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

1. Конфликты имен между написанным пользователем кодом и классами/функциями/константами в PHP или сторонними классами/функциями/константами. 2. Создайте псевдоним (или короткое) имя для длинного имени идентификатора (обычно определяемого для устранения проблемы первого типа), чтобы улучшить читаемость исходного кода.

Следует отметить, что:

  • В одном файле может быть несколько пространств имен.
  • Классы в разных пространствах имен могут вызывать друг друга.

Использование пространств имен PHP

1. Определение

Пространства имен определяются пространством имен ключевых слов следующим образом:

namespace example

Классы в пространстве имен принадлежат пространству имен, и классы в примере пространства имен не могут быть переименованы.

Или вы можете определить многоуровневое пространство имен:

namespace example\test\demo

Тогда все классы в пространстве имен относятся пример\тест\демонстрация Пространства имен.

Определенное пространство имен можно использовать __ПРОСТРАНСТВО ИМЕН__ Магические переменные для получения текущего пространства имен.

2. Введение

Введение пространств имен для использования ключевых слов использование Через несколько использование Введение нескольких пространств имен в файл:

use example;
use example\test\demo;

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

3. Пример

Создание экземпляра и использование метода класса в пространстве имен в программе также использует ключевое слово new для создания экземпляра, но перед именем класса необходим префикс пространства имен.

Например:

Class = new example a (); // instantiate class A in the example namespace
Class = new example test demo B (); class // instantiate class B under example test demo namespace

Если эти пространства имен были введены до файла, префикс класса может не потребоваться:

use example;
use example\test\demo;
Class = new a (); // instantiate class A in the example namespace
Class = New B (); // instantiate class B under example test demo namespace

Примечание: Если используется используйте пример\тест; При создании экземпляра класса b укажите относительный путь к пространству имен (обратите внимание, что это не фактический путь к файлу), то есть новая демонстрация\b();

Конечно, все экземпляры могут напрямую использовать форму абсолютного пути, то есть добавлять символы перед пространством имен, такие как new \example\test\demo\b(); Таким образом, класс B создается в виде абсолютного пути.

4. Псевдонимы

При определении пространства имен с помощью пространства имен, чтобы избежать слишком длинного пространства имен при последующих ссылках, вы можете использовать ключевое слово как для указания псевдонима пространства имен при его определении.

namespace example\test\demo as testDemo;

Это позволяет использовать более позднюю ссылку или создание экземпляра Новая демонстрация теста\Имя класса>();

3. Спецификация пространства имен на основе PSR4

Из-за несоответствия в определении пространств имен для методов и классов в разных проектах и несоответствия в определении пространств имен для сторонних библиотек классов соответствующие организации PHP выпустили набор обычных спецификаций, а именно спецификации PSR4.

Правила, используемые для стандартизации определения пространств имен.

Конкретные технические характеристики заключаются в следующем:

1. Полное имя класса должно иметь следующую структуру:

\ Пространства имен >(Пространства имен>)*Имена классов > 1. Полное имя класса должно иметь пространство имен верхнего уровня, называемое “пространство имен поставщика”; 2. Полные имена классов могут иметь одно или несколько пространств имен; 3. Полное имя класса должно иметь окончательное имя класса; 4. Скользящая строка в любой части полного имени класса не имеет особого значения. 5. Полные имена классов могут состоять из любых прописных и строчных букв; 6. Все имена классов должны быть чувствительны к регистру.

2. При загрузке соответствующего файла в соответствии с полным именем класса

(1) В полном имени класса первый разделитель пространства имен, одно или несколько последовательных пространств имен и подпространств перед ним в качестве “префикса пространства имен”, должны соответствовать по крайней мере одному “каталогу базы файлов”; (2) Подпространства сразу после префикса пространства имен должны соответствовать соответствующему каталогу базы файлов, где разделитель пространства имен будет выступать в качестве разделителя каталогов. (3) Имя класса в конце должно совпадать с именем соответствующего файла с суффиксом. php . (4) Реализация автозагрузчика не должна вызывать исключение, не должна вызывать информацию об ошибках любого уровня и не должна иметь возвращаемого значения.

Основной смысл спецификации заключается в том, что путь к пространству имен соответствует пути к текущему файлу, что стандартизирует критерии определения для всех пространств имен проекта, хотя PHP официально не имеет такового.

Обязательный, но сейчас многие проекты с открытым исходным кодом традиционно используются, что позволяет легко найти путь к классу в пространстве имен.

Например, если есть d.php в каталоге файлов a/b/c, затем, когда файл в каталоге a представляет класс d, следует использовать b/c или использовать/a/b/c; (форма абсолютного пути)

IV. Пункты Внимания

1. Признак класса повторного использования кода также соответствует спецификации пространства имен, то есть класс признака не может быть переименован в пространстве имен. 2. Хотя PSR4 указывает, что пути к пространствам имен соответствуют путям к файлам, пути к пространствам имен не имеют ничего общего с путями к файлам при запуске PHP Например, в файле класса d | b| c пространство имен может быть записано как a1/b1/c1/d; однако многие платформы с открытым исходным кодом теперь стандартизируют эти два при реализации автоматической загрузки классов, в противном случае файлы классов будут загружены, но пространство имен не может быть загружено. 3. В пространстве имен всем определенным именам, которые не преобразуются в соответствии с правилами импорта, предшествует текущее имя пространства имен. Например, если C D e () вызывается в пространстве имен A B, C D e () преобразуется в A B C D e (). 4、 В пространстве имен (например, AB) вызовы функций с неполными именами разрешаются во время выполнения 。 Например, вызов функции foo () разрешается следующим образом: (1) Найти

Выше приводится адрес документа PSR 4: http://www.php-fig.org/psr/psr-4/

Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в базовую грамматику PHP, Краткое описание работы и использования операторов PHP, Краткое описание навыков сетевого программирования PHP, Полный набор навыков работы с массивами PHP и Строка Php. Краткое описание использования, вводный курс по работе с базой данных PHP + MySQL и общие навыки работы с базой данных PHP

Я надеюсь, что эта статья будет полезна для разработки PHP – программ для всех.