PHP中use分析
2016-04-19 00:29
645 查看
use就是导入命名空间,省略use则默认为当前命名空间。
容易类比java的机制,命名空间即java包名,每次都要使用import语句导入对应的包,即use。当省略时,java默认是lang包,这里默认是当前命名空间。
为了防止出错,不要省略use!
在语义上,use和require、include有相似的地方,但是实际上他们是两个不同而且不相干的机制
php官方文档对use的说明
允许通过别名引用或导入外部的完全限定名称,是命名空间的一个重要特征。这有点类似于在类 unix 文件系统中可以创建对其它的文件或目录的符号连接。
所有支持命名空间的PHP版本支持三种别名或导入方式:为类名称使用别名、为接口使用别名或为命名空间名称使用别名。PHP 5.6开始允许导入函数或常量或者为它们设置别名。
在PHP中,别名是通过操作符 use 来实现的. 下面是一个使用所有可能的五种导入方式的例子:
Example #1 使用use操作符导入/使用别名
注意对命名空间中的名称(包含命名空间分隔符的完全限定名称如 Foo\Bar以及相对的不包含命名空间分隔符的全局名称如 FooBar)来说,前导的反斜杠是不必要的也不推荐的,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。
为了简化操作,PHP还支持在一行中使用多个use语句
Example #2 通过use操作符导入/使用别名,一行中包含多个use语句
另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。
Example #4 导入和完全限定名称
容易类比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 My\Full\Classname as Another; // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use ArrayObject; // importing a function (PHP 5.6+) use function My\Full\functionName; // aliasing a function (PHP 5.6+) use function My\Full\functionName as func; // importing a constant (PHP 5.6+) use const My\Full\CONSTANT; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 func(); // calls function My\Full\functionName echo CONSTANT; // echoes the value of My\Full\CONSTANT ?>
注意对命名空间中的名称(包含命名空间分隔符的完全限定名称如 Foo\Bar以及相对的不包含命名空间分隔符的全局名称如 FooBar)来说,前导的反斜杠是不必要的也不推荐的,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。
为了简化操作,PHP还支持在一行中使用多个use语句
Example #2 通过use操作符导入/使用别名,一行中包含多个use语句
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func ?> 导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。 - Example #3 导入和动态名称 <?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化一个 My\Full\Classname 对象 $a = 'Another'; $obj = new $a; // 实际化一个 Another 对象 ?>
另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。
Example #4 导入和完全限定名称
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // instantiates object of class My\Full\Classname $obj = new \Another; // instantiates object of class Another $obj = new Another\thing; // instantiates object of class My\Full\Classname\thing $obj = new \Another\thing; // instantiates object of class Another\thing ?>
相关文章推荐
- phpstorm 正则匹配删除注释行(替换注释行为空行)
- yii2中的rules 自定义验证规则详解
- ThinkPHP中where()使用方法详解
- ThinkPHP中limit()使用方法详解
- ThinkPHP中order()使用方法详解
- 搭建pptp的防火墙过滤规则
- PHP 代码规范
- PHP魔术方法之__call与__callStatic方法
- PHP cURL扩展
- php 文件下载 出现下载文件内容乱码损坏的解决方法
- 分析,理解,优化Laravel
- Laravel5.2常见错误及几觉
- Laravel5 Markdown 编辑器使用教程
- php文件上传与下载
- laravel在wamp中输入地址后总是无法访问
- 关于win7系统搭建FTP服务器
- vsftp 虚拟用户认证
- Yii2 关于时间格式的用法
- Uri的getPathSegments()方法。
- PHP,.net,Java的区别