Документация PHP


Пространства имён

Исключения

Пространства имён

PHP Manual


Правила разбора имён

Разбор имён происходит по следующим правилам:

  1. Все квалифицированные имена транслируются во время компиляции в соответствии с текущими импортированными пространствами имён. К примеру, если импортировано постранство имён A::B::C, вызов C::D::e() будет транслирован как A::B::C::D::e().
  2. Неквалифицированные имена классов транслируются во время компиляции в соответствии с текущими импортированными пространствами имён (полные имена заменяют короткие импортированные имена). К примеру, если пространство имён A::B::C импортировано, new C() будет транслировано как new A::B::C().
  3. Внутри пространства имён вызов неквалифицированных функций, определенных в этом же пространстве имён интерпертируется как вызов в данном пространстве имён во время компиляции.
  4. Внутри пространства имён (например A::B) вызов неквалифицированных функций, не определенных в этом пространстве имён будет разрешаться во время выполнения. Вызов функции foo() будет разрешаться следующим образом:
    1. Поиск в текущем пространстве имён: A::B::foo().
    2. Поиск внутренней PHP функции foo().
    В случае неудачи всех предыдущих попыток будет использован вызов определенной в глобальном пространстве имён функции ::foo().
  5. Внутри пространства имён (например A::B), вызов неквалифицированных классов разрешается во время выполнения. Например вызов new C() будет разрешаться следующим образом:
    1. Поиск класса в текущем пространстве имён: A::B::C.
    2. Попытка вызова внутреннего PHP-класса C.
    3. Попытка автозагрузки A::B::C.
    В случае неудачи всех предыдущих, будет использован вызов new ::C().
  6. Вызов квалифицированных функций разрешается во время выполнения. Например вызов A::B::foo() будет разрешаться следующим образом :
    1. Поиск функции foo() в пространстве имён A::B.
    2. Поиск класса A::B и вызов его статического метода foo(). Будет сделана автозагрузка класса, если необходимо.
  7. Квалифицированные имена классов разрешаются во время компиляции, как классы соответствующего пространства имён. К примеру new A::B::C() будет ссылаться на класс C пространства имён A::B.

Пример #1 Примеры разбора имён

<?php
    namespace A
;

    
// вызовы функций

    
foo();      // сначала попытка вызвать "foo" определенную в пространстве имён "A"
    // затем вызов внутренней функции "foo"

    
::foo();    // вызоы функции "foo" определенной глобально

    // class references

    
new B();    // сначала попытка создать объект класса "B" определенного в пространстве имён "A"
    // затем создание объекта внутреннего класса "B"

    
new ::B();  //  создать объект класса "B" определенного глобально

    // статические методы/функции пространства имён из других (не текущих) пространств имён

    
B::foo();   // сначала попытка вызвать функцию "foo" из пространства имён "A::B"
    // затем вызов метода "foo" внутреннего класса "B"

    
::B::foo(); // сначала попытка вызова функции "foo" из пространства имён  "B"
    // затем вызов метода  "foo" класса "B" из глобального пространства имён

    // статические методы/функции пространства имён из текущего пространства имён

    
A::foo();   // сначала попытка вызова функции "foo" пространства имён "A::A"
    // затем попытка вызова метода "foo" класса "A" из пространства имён "A"
    // затем попытка вызова функции "foo" пространства имён "A"
    // затем вызов метода "foo" внутреннего класса "A" 

    
::A::foo(); // сначала попытка вызова функции  "foo" пространства имён "A"
    // затем вызов метода "foo" класса "A" из глобального пространства имён
    
?>


Пространства имён

Исключения

Пространства имён

PHP Manual

SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…

Linux Optimization

Размещена 30 июля 2012 года

Prelink

читать далее…