小白教程

 找回密码
 立即注册
小白教程 首页 系列教程 PHP系列教程 查看内容

PHP 命名空间

发布者: 小白教程



使用命名空间:别名/导入

PHP 命名空间支持 有两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名。注意PHP不支持导入函数或常量。

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

1、使用 use 操作符导入/使用别名

  1. <?php
  2. namespace foo;
  3. use My\Full\Classname as Another;
  4. // 下面的例子与 use My\Full\NSname as NSname 相同
  5. use My\Full\NSname;
  6. // 导入一个全局类
  7. use \ArrayObject;
  8. $obj = new namespace\Another; // 实例化 foo\Another 对象
  9. $obj = new Another; // 实例化 My\Full\Classname 对象
  10. NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
  11. $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
  12. // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象
  13. ?>

2、 一行中包含多个 use 语句

  1. <?php
  2. use My\Full\Classname as Another, My\Full\NSname;
  3. $obj = new Another; // 实例化 My\Full\Classname 对象
  4. NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
  5. ?>

导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。

3、导入和动态名称

  1. <?php
  2. use My\Full\Classname as Another, My\Full\NSname;
  3. $obj = new Another; // 实例化一个 My\Full\Classname 对象
  4. $a = 'Another';
  5. $obj = new $a; // 实际化一个 Another 对象
  6. ?>

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

4、导入和完全限定名称

  1. <?php
  2. use My\Full\Classname as Another, My\Full\NSname;
  3. $obj = new Another; // instantiates object of class My\Full\Classname
  4. $obj = new \Another; // instantiates object of class Another
  5. $obj = new Another\thing; // instantiates object of class My\Full\Classname\thing
  6. $obj = new \Another\thing; // instantiates object of class Another\thing
  7. ?>

使用命名空间:后备全局函数/常量

在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称,例如:

1、在命名空间中访问全局类

  1. <?php
  2. namespace A\B\C;
  3. class Exception extends \Exception {}
  4. $a = new Exception('hi'); // $a 是类 A\B\C\Exception 的一个对象
  5. $b = new \Exception('hi'); // $b 是类 Exception 的一个对象
  6. $c = new ArrayObject; // 致命错误, 找不到 A\B\C\ArrayObject 类
  7. ?>

对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量。

2、 命名空间中后备的全局函数/常量

  1. <?php
  2. namespace A\B\C;
  3. const E_ERROR = 45;
  4. function strlen($str)
  5. {
  6. return \strlen($str) - 1;
  7. }
  8. echo E_ERROR, "\n"; // 输出 "45"
  9. echo INI_ALL, "\n"; // 输出 "7" - 使用全局常量 INI_ALL
  10. echo strlen('hi'), "\n"; // 输出 "1"
  11. if (is_array('hi')) { // 输出 "is not array"
  12. echo "is array\n";
  13. } else {
  14. echo "is not array\n";
  15. }
  16. ?>


上一篇:PHP 魔术常量下一篇:PHP 面向对象

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-11-24 14:35 , Processed in 0.014227 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部