|
Часто задаваемые вопросы (FAQ): вещи, которые вам необходимо знать о пространствах имен(PHP 5 >= 5.3.0) Этот список вопросов разделен на две части: общие вопросы и некоторые особенности реализации, которые полезны для более полного понимания. Сперва, общие вопросы.
Некоторые детали реализации пространств имен, которые полезно понимать.
Если я не использую пространства имен, следует ли считать что-либо из этого важным ?Нет. Пространства имен не оказывают никакого влияния ни на какой существующий код ни в каком виде или на любой написанный код, который не содержит пространств имен. Вы можете написать такой код, если желаете:
Пример #1 Доступ к глобальным классам вне пространства имен
<?php Это функционально эквивалентно следующему:
Пример #2 Доступ к глобальным классам вне пространства имен
<?php Как мне использовать внутренние или глобальные классы в пространстве имен ?
Пример #3 Доступ ко внутренним классам в пространствах имен
<?php Как мне использовать функции классов в пространствах имен, или константы в их собственном пространстве имен ?
Пример #4 Доступ ко внутренним классам, функциям или константам в пространствах имен
<?php Как такое имя как \my\name или \name преобразуется ?Имена, которые начинаются с \ всегда преобразуются к тому как они выглядят, т.е. \my\name - это на самом деле my\name, и \Exception - это Exception. Пример #5 Абсолютные имена
<?php Как такое имя, как my\name преобразуется ?Имена, которые содержат обратный слеш, но не начинаются с него, такие как my\name могут быть преобразованы двумя различными способами. Если присутствует импортирующее выражение, которое создает синоним my другого имени, то этот синоним применяется к my в my\name. В ином случае, текущее имя пространства имен становится префиксом к my\name.
Пример #6 Полные имена
<?php Как неполное имя класса такое как name преобразуется ?Имена классов, которые не содержат обратный слеш, такие как name могут быть преобразованы двумя различными способами. Если присутствует импортирующее выражение, которое создает синоним name другого имени, то применяется этот синоним. В ином случае, текущее имя пространства имен становится префиксом к my\name.
Пример #7 Неполные имена классов
<?php Как неполное имя функции или неполное имя константы такое как name преобразуется ?Имена функций или констант, которые не содержат обратного слеша, такие как name могут быть преобразованы двумя различными способами. Сперва, текущее имя пространства имен становится префиксом к name. Затем, если константа или функция name не существует в текущем пространстве имен, используется глобальная константа или функция name, если она существует.
Пример #8 Неполные имена функций или констант
<?php Импортируемые имена не могут конфликтовать с классами, определенными в том же файле.Следующие комбинации скриптов допустимы: file1.php
<?php another.php
<?php file2.php
<?php Конфликт имен отсутствует даже несмотря на то, что класс MyClass существует внутри пространства имен my\stuff, потому что определение MyClass находится в отдельном файле. Однако следующий пример приводит к фатальной ошибке с конфликтом имен, потому что класс MyClass определен в том же файле, где находится оператор use.
<?php Вложенные пространства имен недопустимы.PHP не позволяет вложение пространств имен одно в другое
<?php
<?php Ни функции, ни константы не могут быть заимпортированы с помощью оператора use.Элементы, которые подвержены действию оператора use - это пространства имен и имена классов. Для сокращения длинных имен констант или функций, заимпортируйте их содержимое в пространство имен.
<?php Динамические имена пространств имен (идентификаторы, взятые в кавычки) должны экранировать символ обратного слеша.Очень важно представлять это, потому что обратный слеш используется как экранирующий символ внутри строк. Он всегда должен быть продублирован, когда используется внутри строки, иначе появляется риск возникновения неумышленных последствий: Пример #9 Подводные камни при использовании имени пространства имен внутри строки с двойными кавычками
<?php Ссылаться на неопределенные константы, используя обратный слеш, нельзя. Выводится фатальная ошибкаЛюбая неопределенная константа, являющаяся неполным именем, как FOO, будет приводить к выводу сообщения о том, что PHP предположил, что FOO было значение константы. Любая константа, с полным именеи или абсолютным, которая содержит символ обратного слеша будет приводить к фатальной ошибке, если не будет найдена. Пример #10 Неопределенные константы
<?php Невозможно переопределить специальные константы, такие как NULL, TRUE, FALSE, ZEND_THREAD_SAFE или ZEND_DEBUG_BUILDЛюбая попытка определить константу пространства имен, которая совпадает с названиями специальных встроенных констант, приведет к фатальной ошибке. Пример #11 Неопределенные константы
<?php |
|