PHP头条
热点:

PHP命名空间高级特性

接下来让我们看一看PHP命名空间的一些高级特性。

__NAMESPACE__常量

__NAMESPACE__是一个PHP字符串,它总是返回当前命名空间的名称,在全局空间中它是一个空字符串。

  1. < ?php  
  2. namespace App\Lib1;  
  3. echo __NAMESPACE__; // outputs: App\Lib1  
  4. ?>  
  5.  

这个值在调试时非常有用,它也可由于动态生成一个完全限定类名,如:

  1. < ?php  
  2. namespace App\Lib1;  
  3.  
  4. class MyClass {  
  5.  public function WhoAmI() {  
  6. return __METHOD__;  
  7.  }  
  8. }  
  9.  
  10. $c = __NAMESPACE__ . '\\MyClass';  
  11. $m = new $c;  
  12. echo $m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI  
  13. ?>  

namespace关键字

namespace关键字可以用于明确引用一个当前命名空间或子命名空间中的项目,它等价于类中的self命名空间:

  1. < ?php  
  2. namespace App\Lib1;  
  3.  
  4. class MyClass {  
  5.  public function WhoAmI() {  
  6. return __METHOD__;  
  7.  }  
  8. }  
  9.  
  10. $m = new namespace\MyClass;  
  11. echo $m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI  
  12. ?>  

自动载入命名空间类

PHP 5中最省时省力的特性是自动载入,在全局非命名空间)PHP代码中,可以写一个标准自动载入函数:

  1. < ?php  
  2. $objnew MyClass1(); // classes/MyClass1.php is auto-loaded  
  3. $objnew MyClass2(); // classes/MyClass2.php is auto-loaded  
  4.  
  5. // autoload function  
  6. function __autoload($class_name) {  
  7.  require_once("classes/$class_name.php");  
  8. }  
  9. ?>  

在PHP 5.3中,你可以创建一个命名空间类的实例,在这种情况下,完全限定命名空间和类名传递给__autoload函数,例如,$class_name的值可能是App\Lib1\MyClass。你可以在相同的文件夹下放置所有的PHP类文件,从字符串中提取命名空间,但那样会导致文件名冲突。

另外,你的类文件层次结构会按照命名空间的结构重新组织,例如,MyClass.php文件可以创建在/classes/App/Lib1文件夹下:

/classes/App/Lib1/MyClass.php

  1. < ?php  
  2. namespace App\Lib1;  
  3.  
  4. class MyClass {  
  5.  public function WhoAmI() {  
  6. return __METHOD__;  
  7.  }  
  8. }  
  9. ?>  

在根文件夹下的文件就使用下面的代码了:

myapp.php

  1. < ?php  
  2. use App\Lib1\MyClass as MC;  
  3.  
  4. $obj = new MC();  
  5. echo $obj->WhoAmI();  
  6.  
  7. // autoload function  
  8. function __autoload($class) {  
  9.  // convert namespace to full file path  
  10.  $class = 'classes/' . str_replace('\\', '/', $class) . '.php';  
  11.  require_once($class);  
  12. }  
  13. ?>  

解释:

1.类App\Lib1\MyClass的别名是MC;

2. new MC( )在编译时被翻译成new App\Lib1\MyClass( );

3.字符串App\Lib1\MyClass被传递给__autoload函数,使用文件路径正斜线替换所有命名空间中的反斜线,然后修改字符串,classes\App\Lib1\MyClass.php文件被自动载入;

总结

有关PHP命名空间的使用就介绍到这里,希望您能够对PHP的命名空间有一个新的认识,并希望你能在新项目中真正使用命名空间。

原文:How to Use PHP Namespaces

作者:Craig Buckler

编辑推荐】

  1. PHP 5.3中的命名空间:你用过了么?
  2. PHP 5.3中的命名空间使用方法浅述
  3. PHP 5.3.0发布 新增命名空间等多项特性
  4. PHP的命名空间
  5. PHP 5.3闭包语法初探


www.phpzy.comtrue/php/17502.htmlTechArticlePHP命名空间高级特性 接下来让我们看一看PHP命名空间的一些高级特性。 __NAMESPACE__常量 __NAMESPACE__是一个PHP字符串,它总是返回当前命名空间的名称,在全...

相关文章

PHP之友评论

今天推荐