Правила дозволу імен
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Для цілей цих правил дозволу наведемо важливі визначення:
Визначення імені простору імен
Неповне ім'я
Ідентифікатор без роздільника просторів імен, наприклад Foo
Повне ім'я
Ідентифікатор з роздільником просторів імен, наприклад Foo\Bar
Абсолютне ім'я
Ідентифікатор з роздільником просторів імен, який починається з роздільника просторів імен, наприклад \Foo\Bar
. Простір імен \Foo
— также абсолютное имя.
Відносне ім'я
Ідентифікатор, який починається з ключового слова namespace
, наПрикладnamespace\Foo\Bar
Імена дозволяються за такими правилами:
- Абсолютні імена дозволяються без провідного роздільника простору імен. Наприклад,
\A\B
дозволяється вA\B
- Відносні імена дозволяються в ім'я із заміною ключового слова
namespace
поточним простором імен. Якщо ім'я зустрічається у глобальному просторі імен, префіксnamespace\
видаляється. Наприклад,namespace\A
усередині простору іменX\Y
дозволяється вX\Y\A
. Те ж ім'я в глобальному просторі імен дозволяється вA
- У повних іменах перший сегмент імені перетворюється з урахуванням поточної таблиці імпорту класу чи простору імен. Наприклад, якщо простір імен
A\B\C
імпортовано якC
, то ім'яC\D\E
преобразуется вA\B\C\D\E
- У повних іменах, якщо не застосовувалося правило імпорту, поточний простір імен додається до імені. Наприклад, ім'я
C\D\E
усередині простору іменA\B
вирішиться уA\B\C\D\E
- Неповні імена перетворюються з урахуванням поточної таблиці імпорту та типу елемента. Тобто імена як класів перетворюються з урахуванням таблиці імпорту класів чи просторів імен, імена функцій — з урахуванням таблиці імпорту функцій, а константи — таблиці імпорту констант. Наприклад, під час запису
use A\B\C;
, викликnew C()
дозволяється вA\B\C()
. Аналогічно, під час записуuse function A\B\foo;
викликfoo()
дозволяється вA\B\foo
- На початок неповних імен, якщо не застосовувалося правило імпорту та ім'я відноситься до елемента з ім'ям як у класу, додається поточний простір імен. Наприклад, ім'я класу у виразі
new C()
усередині простору іменA\B
дозволиться в ім'яA\B\C
- У неповних іменах, якщо не застосовувалося правило імпорту та ім'я відноситься до функції або константи, а код лежить за межами глобального простору імен, ім'я дозволяється під час виконання. Ось як дозволиться виклик функції
foo()
у коді у просторі іменA\B
:- Виконується пошук функції з поточного простору імен:
A\B\foo()
- PHP намагається знайти та викликати функцію
foo()
изглобального простору імен
- Виконується пошук функції з поточного простору імен:
Приклад #1 Приклади дозволу імен
Loading...