为何要使用命名空间。php
大量的开发者编写了大量的函数库,意味着在一个空间下会有重名的类。使用命名空间避免冲突致使异常。函数
<?php namespace cart; function getCart() { echo "coke\n"; }
cart.phpspa
<?php namespace user; function getName() { echo "jun\n"; }
user.phpcode
<?php //命名空间 // 文件都引用到这个文件中,模拟单入口登陆 // 以后看看命名空间如何调用函数方法或者对象的 // index.php user.php cart.php // namespace 必须在文件开始的时候就声明,并且不用引号 // 若是申明了文件的命名空间,那么下次调用的时候必须声明文件所在的命名空间(包)才能调用 namespace index; include("user.php"); include("cart.php"); //namespace user; getName(); //Fatal error: Call to undefined function index\getName() in D:\code\demo\index.php on line 14 namespace user; getName(); //jun namespace cart; getCart(); //coke
<?php namespace usr\foo; echo __NAMESPACE__;// usr\foo;
######################################################对象
cart.php作用域
<?php namespace cart; class Cart { function __construct() { echo "coke\n"; } }
user.php开发
<?php namespace user; class User { function __construct() { echo "jun\n"; } }
index.phpget
<?php // use 来声明命名空间的别名 include("cart.php"); $c = new cart\Cart(); // coke include("user.php"); $u = new \user\User();//以反斜杠开始的是绝对命名空间, //从根命名空间开始搜索,而不是当前命名空间 // jun use \user as u; //使用别名来简化书写,若是没有as 那么默认别名是最后一个斜杠后面的名字 $u = new u\User();
调用方式io
1,namespace Name; 对象名function
2 , Name+ 反斜杠+对象名
当前命名空间名
__NAMESPACE__
使用别名
use alias\use as use 或者 alias\use 不用as时默认 use 为别名
从根命名空间开始查找匹配(树根则是无名的全局命名空间)
反斜杠+名字 \use\foo
反过来想一想,是否对任何的php代码都能使用命名空间,
回去查手册:虽然任意合法的PHP代码均可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。
咱们只能用命名空间操做类,函数,和常量
什么叫命名空间?
命名空间是对做用域的一种特殊的抽象,它包含了处于该做用域内的标识符,且自己也用一个标识符来表示,这样便将一系列在逻辑上相关的标识符用一个标识符组织了起来。
(固然不少时候咱们使用的生产环境尚未到5.3或者因为其余缘由没有使用命名空间,那么也可使用PEAR包的命名规则)