Names are resolved following these resolution rules:
C::D::e()
is translated to A::B::C::D::e()
.
new C()
is
translated to new A::B::C()
.
Inside namespace (say A::B), calls to unqualified functions that are not defined in current namespace are resolved at run-time. Here is how a call to function foo() is resolved:
To call a user defined function in the global namespace, ::foo() has to be used.
Inside namespace (say A::B), calls to unqualified class names are
resolved at run-time. Here is how a call to
new C()
is resolved:
To reference a user defined class in the global namespace,
new ::C()
has to be used.
Calls to qualified functions are resolved at run-time. Here is how a call to A::B::foo() is resolved:
new A::B::C()
refers to class
C
from namespace >A::B.
Exemple 20.6. Name resolutions illustrated
<?php
namespace A;
// function calls
foo(); // first tries to call "foo" defined in namespace "A"
// then calls internal function "foo"
::foo(); // calls function "foo" defined in global scope
// class references
new B(); // first tries to create object of class "B" defined in namespace "A"
// then creates object of internal class "B"
new ::B(); // creates object of class "B" defined in global scope
// static methods/namespace functions from another namespace
B::foo(); // first tries to call function "foo" from namespace "A::B"
// then calls method "foo" of internal class "B"
::B::foo(); // first tries to call function "foo" from namespace "B"
// then calls method "foo" of class "B" from global scope
// static methods/namespace functions of current namespace
A::foo(); // first tries to call function "foo" from namespace "A::A"
// then tries to call method "foo" of class "A" from namespace "A"
// then tries to call function "foo" from namespace "A"
// then calls method "foo" of internal class "A"
::A::foo(); // first tries to call function "foo" from namespace "A"
// then calls method "foo" of class "A" from global scope
?>