PHP’s namespace (namespace) is the most important new feature added in PHP 5.3. This concept has been in C# for a long time. Namespace in PHP is actually the same concept as C#.
1. Dynamic access to namespace elements
namespace me\poet; function test() { echo '1111'; } $fun = 'test';//不能这么用,最后$fun()无法动态调用到test():Fatal error: Call to undefined function test() $fun = '\me\poet\test';//正确 //$fun = 'me\poet\test';//正确 $fun();
In other words, the dynamic call must be a qualified name or a fully qualified name (Conceptual reference: Basics of using PHP namespaces)
2. Magic constants and operators
namespace me\poet; function test() { echo '1'; } echo __NAMESPACE__; //魔术常量:命名空间的名称(输出 me\poet) //namespace操作符:显式访问当前命名空间或子命名空间中的元素,等价于类中的self操作符 \me\poet\test(); namespace\test(); //上两行代码等价。
3. Alias, import and global space (including multiple examples)
namespace ws\weichen\www; use ws\weichen\www as poet;//定义别名poet //use ws\weichen\www; //不加as,则取最后的作为别名(www) function demo() { echo '1'; } \ws\weichen\www\demo(); poet\demo(); //www\demo(); //不加as的情况,则这样调用
The above three lines of code have the same effect.
The advantage of naming according to the rules (wsweichenwww): If you change the domain name, you only need to change the prefix name, which will not affect the use of the alias www in the subsequent code.
/* 导入 */ include 'hello.class.php'; use \ws\weichen\www; use \Hello; /*--------------------------------------------------------*/ /* 支持多个use语句 */ use \nihao\shijie as hello, \ws\weichen\www; /*--------------------------------------------------------*/ /* 全局空间:反斜线调用 */ namespace A\B\C; //这个函数是 A\B\C\fopen(); function fopen() { $f = \fopen('demo.txt');//调用全局fopen函数 return $f; }
No problem with grammar.
What is your PHP version? PHP supports namespaces starting from version 5.3.0. Your PHP version may be lower.
1. namespace Zend\Http\PhpEnvironment;
This code defines a namespace, which you can understand as defining a domain name named Zend\Http\PhpEnvironment.
After definition, the classes, interfaces, const, etc. declared below are all in the declared "domain". When referencing an include file that declares a namespace, and if you want to call something in it, you must:
Adjust the current script to this domain name, otherwise, you have to use the full name of namesapce.
For example, inc.php file:
namespace Zend\Http\PhpEnvironment;
class Bar {}//define a class
when called by other files :
// The first way to access Foo, use the full name
require 'inc.php';
$foo = new \Zend\Http\PhpEnvironment\Bar();
//The second method of accessing Foo
namespace Foo; //Adjust the current script to the ns domain of Foo, and the namespace declaration must be in the first sentence
require 'inc.php';
$foo = new Bar();
2. The purpose of the use keyword is to use the alias of ns:
For example, the above
// is the first to access Foo This method uses the full name
require 'inc.php';
$foo = new \Zend\Http\PhpEnvironment\Bar();
After using uses, the writing is as follows:
use \Zend\Http\PhpEnvironment as pe; //Define alias
$foo = new \pe\Bar(); //Use short alias to replace original
if Omit the following as...., then you can directly replace it with the text of the last section, for example, the above:
use \Zend\Http\PhpEnvironment; //Define alias
$ foo = new \PhpEnvironment\Bar(); //Replace the original
======================== with a short alias ========================
Relevant content in the official PHP manual:
In PHP, namespace naming Space is used to solve two types of problems encountered when creating reusable code such as classes or functions when writing class libraries or applications:
1. User-written code and PHP internal classes/functions/constants Or name conflicts between third-party classes/functions/constants.
2. Create an alias (or short) name for a very long identifier name (usually defined to alleviate the first type of problem) to improve the readability of the source code.
PHP namespaces provide a way to group related classes, functions, and constants together.
PHP namespace supports two ways of using aliases or imports: using aliases for class names, or using aliases for namespace names. Aliases are implemented through the operator use. ...The rest of the text>>