Name resolution rules
Name resolution rules
(PHP 5 >= 5.3.0, PHP 7)
For the purposes of these resolution rules, here are some important definitions:
Namespace name definitions
Unqualified name
This is an identifier without a namespace separator, such as Foo
Qualified name
This is an identifier with a namespace separator, such as Foo\Bar
Fully qualified name
This is an identifier with a namespace separator that begins with a namespace separator, such as \Foo\Bar
. The namespace \Foo
is also a fully qualified name.
Relative name
This is an identifier starting with namespace
, such as namespace\Foo\Bar
.
Names are resolved following these resolution rules:
- Fully qualified names always resolve to the name without leading namespace separator. For instance
\A\B
resolves toA\B
.
Example #1 Name resolutions illustrated
<?php
namespace A;
use B\D, C\E as F;
// function calls
foo( // first tries to call "foo" defined in namespace "A"
// then calls global function "foo"
\foo( // calls function "foo" defined in global scope
my\foo( // calls function "foo" defined in namespace "A\my"
F( // first tries to call "F" defined in namespace "A"
// then calls global function "F"
// class references
new B( // creates object of class "B" defined in namespace "A"
// if not found, it tries to autoload class "A\B"
new D( // using import rules, creates object of class "D" defined in namespace "B"
// if not found, it tries to autoload class "B\D"
new F( // using import rules, creates object of class "E" defined in namespace "C"
// if not found, it tries to autoload class "C\E"
new \B( // creates object of class "B" defined in global scope
// if not found, it tries to autoload class "B"
new \D( // creates object of class "D" defined in global scope
// if not found, it tries to autoload class "D"
new \F( // creates object of class "F" defined in global scope
// if not found, it tries to autoload class "F"
// static methods/namespace functions from another namespace
B\foo( // calls function "foo" from namespace "A\B"
B::foo( // calls method "foo" of class "B" defined in namespace "A"
// if class "A\B" not found, it tries to autoload class "A\B"
D::foo( // using import rules, calls method "foo" of class "D" defined in namespace "B"
// if class "B\D" not found, it tries to autoload class "B\D"
\B\foo( // calls function "foo" from namespace "B"
\B::foo( // calls method "foo" of class "B" from global scope
// if class "B" not found, it tries to autoload class "B"
// static methods/namespace functions of current namespace
A\B::foo( // calls method "foo" of class "B" from namespace "A\A"
// if class "A\A\B" not found, it tries to autoload class "A\A\B"
\A\B::foo( // calls method "foo" of class "B" from namespace "A"
// if class "A\B" not found, it tries to autoload class "A\B"
?>
← Using namespaces: fallback to global function/constant
FAQ: things you need to know about namespaces →
© 1997–2017 The PHP Documentation Group
Licensed under the Creative Commons Attribution License v3.0 or later.
https://secure.php.net/manual/en/language.namespaces.rules.php