牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP中use分析

创建时间:2016-04-19 投稿人: 浏览次数:426

use就是导入命名空间,省略use则默认为当前命名空间。
容易类比java的机制,命名空间即java包名,每次都要使用import语句导入对应的包,即use。当省略时,java默认是lang包,这里默认是当前命名空间。
为了防止出错,不要省略use

语义上,use和require、include有相似的地方,但是实际上他们是两个不同而且不相干的机制


php官方文档对use的说明


允许通过别名引用或导入外部的完全限定名称,是命名空间的一个重要特征。这有点类似于在类 unix 文件系统中可以创建对其它的文件或目录的符号连接。

所有支持命名空间的PHP版本支持三种别名或导入方式:为类名称使用别名、为接口使用别名或为命名空间名称使用别名。PHP 5.6开始允许导入函数或常量或者为它们设置别名。

在PHP中,别名是通过操作符 use 来实现的. 下面是一个使用所有可能的五种导入方式的例子:

  • Example #1 使用use操作符导入/使用别名
<?php
namespace foo;
use MyFullClassname as Another;

// 下面的例子与 use MyFullNSname as NSname 相同
use MyFullNSname;

// 导入一个全局类
use ArrayObject;

// importing a function (PHP 5.6+)
use function MyFullfunctionName;

// aliasing a function (PHP 5.6+)
use function MyFullfunctionName as func;

// importing a constant (PHP 5.6+)
use const MyFullCONSTANT;

$obj = new namespaceAnother; // 实例化 fooAnother 对象
$obj = new Another; // 实例化 MyFullClassname 对象
NSnamesubnsfunc(); // 调用函数 MyFullNSnamesubnsfunc
$a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
// 如果不使用 "use ArrayObject" ,则实例化一个 fooArrayObject 对象
func(); // calls function MyFullfunctionName
echo CONSTANT; // echoes the value of MyFullCONSTANT
?>

注意对命名空间中的名称(包含命名空间分隔符的完全限定名称如 FooBar以及相对的不包含命名空间分隔符的全局名称如 FooBar)来说,前导的反斜杠是不必要的也不推荐的,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。
为了简化操作,PHP还支持在一行中使用多个use语句

  • Example #2 通过use操作符导入/使用别名,一行中包含多个use语句
<?php
use MyFullClassname as Another, MyFullNSname;

$obj = new Another; // 实例化 MyFullClassname 对象
NSnamesubnsfunc(); // 调用函数 MyFullNSnamesubnsfunc
?>
导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。

- Example #3 导入和动态名称

<?php
use MyFullClassname as Another, MyFullNSname;

$obj = new Another; // 实例化一个 MyFullClassname 对象
$a = "Another";
$obj = new $a;      // 实际化一个 Another 对象
?>

另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。

  • Example #4 导入和完全限定名称
<?php
use MyFullClassname as Another, MyFullNSname;

$obj = new Another; // instantiates object of class MyFullClassname
$obj = new Another; // instantiates object of class Another
$obj = new Another	hing; // instantiates object of class MyFullClassname	hing
$obj = new Another	hing; // instantiates object of class Another	hing
?>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。