Правила дозволу імен

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

Для цілей цих правил дозволу наведемо важливі визначення:

Визначення імені простору імен

Неповне ім'я

Ідентифікатор без роздільника просторів імен, наприклад Foo

Повне ім'я

Ідентифікатор з роздільником просторів імен, наприклад Foo\Bar

Абсолютне ім'я

Ідентифікатор з роздільником просторів імен, який починається з роздільника просторів імен, наприклад \Foo\Bar. Простір імен \Foo— также абсолютное имя.

Відносне ім'я

Ідентифікатор, який починається з ключового слова namespace, наПрикладnamespace\Foo\Bar

Імена дозволяються за такими правилами:

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

Приклад #1 Приклади дозволу імен

Loading...