PHP
语言参考 | Language Reference

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 to A\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