Here, we can make a simple analogy between the PHP namespace and the file system. There are three methods to access a file in a file system:
Use namespace: Basic
PHP determines which namespace to use to send elements
Here, we can make a simple analogy between the PHP namespace and the file system. There are three methods to access a file in a file system:
The relative file name is similar to foo.txt. It will be parsed to currentdirectory/foo.txt, where currentdirectory indicates the current directory. Therefore, if the current directory is/home/foo, the file name is resolved to/home/foo/foo.txt.
The relative path name format is subdirectory/foo.txt. It will be parsed as currentdirectory/subdirectory/foo.txt.
The absolute path name format is/main/foo.txt. It will be parsed to/main/foo.txt.
PHP namespaces use the same principle. For example, the class name can be normally referenced in the following three methods:
A non-qualified name or a class name that does not contain a prefix, for example, $ a = new foo (); or foo: staticmethod ();. If the current namespace is currentnamespace, foo will be parsed as currentnamespace \ foo. If the code using foo is global and is not included in any namespace, foo will be parsed as foo. Warning if the function or constant in the namespace is not defined, the undefined function name or constant name will be resolved to the global function name or constant name. For more information, see use namespace: backup global function name/constant name.
A qualified name, or a name containing a prefix, such as $ a = new subnamespace \ foo (); or subnamespace \ foo: staticmethod ();. If the current namespace is currentnamespace, foo will be parsed as currentnamespace \ subnamespace \ foo. If the code using foo is global and is not included in any namespace, foo will be parsed as subnamespace \ foo.
A fully qualified name or a name that contains the global prefix operator, for example, $ a = new \ currentnamespace \ foo (); or \ currentnamespace \ foo: staticmethod ();. In this case, foo is always parsed as the text name (literal name) currentnamespace \ foo in the code.
Note that you can use a fully qualified name to access any global class, function, or constant, such as \ strlen (), \ Exception, or \ INI_ALL.
Key points of namespaces in dynamic classes
Example1.php
To convert the following code to a namespace, you must use a fully qualified name (including the class name with the namespace prefix ). Note that in the dynamic class name, function name, or constant name, the qualified name and fully qualified name are no different, so the leading backslash is unnecessary.
Namespace keyword and NAMESPACE constant
PHP supports two abstract methods to access the internal elements of the current NAMESPACE, the namespace magic constant and the NAMESPACE keyword. Note: the magic constant has two underscores.
NAMESPACE
The constant NAMESPACE value is a string containing the name of the current NAMESPACE. Globally, code that is not included in any namespace contains an empty string.
The global code outputs an empty string when no namespace is available.
Constant NAMESPACE is useful for dynamically creating names, for example:
Namespace
The keyword namespace can be used to explicitly access elements in the current namespace or sub-namespace. It is equivalent to the self operator in the class.
Use the alias/import in the namespace
Allowing alias reference or external fully qualified names is an important feature of a namespace. This is similar to creating symbolic connections to other files or directories in unix-like file systems.
All PHP versions that support namespaces support three alias or import methods: use an alias for the class name, use an alias for the interface, or use an alias for the namespace name. PHP 5.6 allows you to import functions or constants or set aliases for them.
In PHP, aliases are implemented through the use operator. Below is an example of using all the five possible import methods:
Note: For the name in the namespace (the fully qualified name that contains the namespace separator, such as Foo \ Bar, and the global name that does not contain the namespace separator, such as FooBar, the leading backslash is unnecessary and not recommended, because the imported name must be fully qualified and will not be parsed relative to the current namespace.
To simplify the operation, PHP also supports multiple use statements in one row.
The import operation is compiled and executed, but the dynamic class name, function name, or constant name is not.
In addition, the import operation only affects non-qualified names and qualified names. The fully qualified name is determined, so it is not affected by the import.
Resolution priority policy
In a namespace, when PHP encounters an unqualified class, function, or constant name, it uses different priority policies to parse the name.
Class resolution priority
The class name is always resolved to the name in the current namespace. Therefore, you must use a fully qualified name to access the class name in the system or that is not included in the namespace. for example:
Resolution priority of functions and constants
For functions and constants, if this function or constant does not exist in the current namespace, PHP will return and use the function or constant in the global space.
The above is the content in the namespace-Part 1 of note 008 PHP. For more information, see PHP Chinese website (www.php1.cn )!