首页  >  文章  >  后端开发  >  php命名空间:别名和导入实例详解

php命名空间:别名和导入实例详解

伊谢尔伦
伊谢尔伦原创
2017-05-19 15:04:121934浏览

别名和导入可以看作调用命名空间的一种快捷方式。允许通过别名引用或导入外部的完全限定名称,是命名空间的一个重要的特性。这有点类似于在 Linux 文件系统中可以创建对其他文件或目录的软连接。上一章节讲解了命名空间中需要知道关于空间三种名称的术语:非限定名称、限定名称、完全限定名称。只有先了解这三个名称和术语,才能更好的学习和了解命名空间的别名和导入的内容。                       

php命名空间支持两种使用别名或导入方式:为类名称使用别名,或者为命名空间名称使用别名。注意 php 导入函数或常量。在php 中,别名是通过操作符 use 来实现的。

下面是一个使用所有可能的导入方式的实例代码:

<?php
namespace cn\my;  //声明命名空间 cn\my
class User{ }     // 当前空间下声明一个类
namespace shop;   // 在创建一个空间
use cn\my;        //导入一个命名空间
$my_User = new my\User();    //导入命名空间后可使用限定名称调用元素
use cn\my as u;            //命名空间使用别名
$my_User = new u\User();   //使用别名代替空间名
use cn\my\User;              //导入一个类
$my_User = new User();       //导入类后可使用非限定名称调用元素
use cn\my\User as myUser;   // 为类使用别名
$my_User = new myUser();   //使用别名代替空间名
?>

需要注意一点,如果在用 use 进行导入的时候,当前空间有相同的名称元素,将会发生致命错误。

其代码如下所示:

<?php
namespace cn\my;
class User{ }
namespace shop;
class User{ }
class myUser{ }
//导入一个类
use cn\my\User;
// 与当前空间的 User 发生冲突,产生致命错误
$my_user = new User();
// 为类使用别名
use cn\my\User as myUser;
// 与当前空间 myUser 发生冲突,产生致命错误
$my_user = new myUser();
?>

除了使用别名和导入,还可以通过 namespace 关键字和 __NAMESPACE__ 魔法常量动态地访问元素。其中namespace 关键字表示当前空间,而魔法常量 __NAMESPACE__ 的值是当前空间的名称, __NAMESPACE__可以通过组合字符串的形式来动态调用。

其示例代码如下所示:

<?php
namespace cn\my;  //声明命名空间 cn\my
const PATH = &#39;cn\my&#39;;
class User{ }     // 当前空间下声明一个类
echo namespace\PATH;   //namespace 关键字表示当前空间 cn\my
$User = new namespace\User(); //使用namespace代替 \cn\my
echo __NAMESPACE__;    //魔法常量的值是当前空间名称 cn\my
$User_class =  __NAMESPACE__ . &#39;\User&#39;;  //组合称字符串并调用
$User = new $User_class;
?>

上面的动态调用的例子中,字符串形式的动态调用方式,需要注意的是使用双引号的时候特殊字符可能被转义,例如在  "__NAMESPACE__ . "\User" " 中, "\User"在双引号字符串中会被转义。另外,php在编译脚本的时候就确定了元素所在的空间,以及导入的情况。 而在解析脚本时字符串形式的调用只能认为是非限定名称和完全限定名称,而永远不可能是限定名称。

以上就是php命名空间:别名和导入的介绍,朋友们需要多多练习和运用代码,熟练掌握php命名空间对于使用PHP框架开发有巨大的帮助。

【相关教程推荐】

1. 《php.cn独孤九贱(4)-php视频教程

2.  视频教程:PHP5.6对命名空间的扩展:use可以导入函数和常量空间啦

3.  php编程从入门到精通全套教程

以上是php命名空间:别名和导入实例详解的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn