PHP命名空间(namespace)是在PHP5.3中加入的,可以解决以下两类问题:
1、用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2、为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
使用namespace关键字定义命名空间
定义命名空间的语法格式
语法格式1:
namespace 命名空间1; ... namespace 命名空间2; ... 直到下一个namespace语句之前的所有代码都属于该命名空间
语法格式2:
namespace 命名空间1{...} namespace 命名空间2{...} 当一个文件中有多个命名空间时推荐使用语法格式2
如果一个文件中有全局的命名空间,只能使用语法格式2(大括号形式),全局代码用一个不带名称的namespace语句
namespace 命名空间1{...} namespace {...//全局代码}
1、命名空间可以有多个层级,各个层级之间使用反斜杠"\"分隔(one\two\three\...)
2、在声明命名空间之前唯一合法的代码是declare(encoding="")语句,其他所有非PHP代码包括空白符都不能出现
<html> <?php $name='qingheluo'; namespace Myjob\Myname\info; ?> 命名空间前出现了非php代码"<html>",会致命错误 命名空间前出现了非declare语句的php代码"$name='qingheluo'",会致命错误
常量__NAMESPACE__表示当前命名空间名称的字符串
命名空间的使用
1、非限定名称,不包含命名空间前缀,如new foo() 会解析为该代码所在命名空间 如果在改代码所在命名空间没有找到指定类或变量,会被解析为全局类或变量 2、限定名称,使用相对路径形式的命名空间前缀,如new mynamespace\foo() 会在命名空间之前加上该代码所在命名空间 3、完全限定名称,使用绝对路径形式的命名空间前缀,如new \mynamespace\foo() 会在全局中寻找指定命名空间 使用new \foo()表示全局命名空间中的类或变量
命名空间的导入和别名
如果命名空间很长那么会给编写和阅读带来困扰,我们可以使用别名来缩短过长的命名空间
php命名空间可以定义命名空间、类名和函数名的别名
在命名空间内引入其他文件不会属于本命名空间,而属于公共空间或是文件中本身定义的命名空间
use关键字用来定义命名空间和类名的别名 use Myjob\Myname\info as new_Name use Myjob\Myname\info\ClassName as new_ClassName use function关键字用来定义函数的别名 use function Myjob\Myname\info\func_name as new_func_name;
as语句可以省略,表示使用最后一个名称作为别名
use Myjob\Myname\info等同于 use Myjob\Myname\info as info use Myjob\Myname\info\ClassName等同于 use Myjob\Myname\info\ClassName as ClassName use function Myjob\Myname\info\func_name等同于 use function Myjob\Myname\info\func_name as new_func_name;
一行use语句可以定义多个别名
use Myjob\Myname\info,Myjob\Myname\info\ClassName,...
导入操作是在编译执行的,动态的类名和函数名则不是
use Myjob\Myname\info\ClassName as Myclass $obj = new Myclass; //实例化一个Myjob\Myname\info\ClassName对象 $a = 'Myclass'; $obj = new $a; //实际化一个Another对象
导入操作只影响相对路径和无路径。完全限定名称由于是确定的,故不受导入的影响。
use Myjob\Myname\info\ClassName as Myclass $obj = new \Myclass; // 实例化Myclass类
关键字namespace可用来显式访问当前命名空间中的元素
<?php namespace Myjob; use Other\obj as mine; mine\mine(); //调用函数 Other\obj\mine() namespace\obj\mine(); //调用函数 Myjob\obj\mine() ?>
- 本文固定链接: https://www.qingheluo.com/phpzhongdemingmingkongjian/
- 转载请注明: qingheluo 于 清河洛 发表