熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP 5.3 特性:命名空間

2013-11-15 12:37:36  來源: PHP編程 

  PHP 的一個新的重要特性就是 命名空間(namespace)
這一特性在 PHPx 時候就提出過後來被取消並安排在 PHP 中實現而此次又再次提前到了 PHP 發布可見開發人員對其的重視以及謹慎的態度

  官方發布時說明文檔的內容可能已過期(documentation maybe out dated)所以在這裡簡單的說明命名空間的用法首先是聲明一個命名空間加入了新的關鍵字 namespace 其應在類文件的開頭

  

  

  <?php namespace Project::Module; class User { const STATUS_OK = true; function register($data) { } } ?>

  然後在控制器中(可能是其他文件)就可以這樣調用

  

  $user = new Project::Module::User(); $user>register($register_info);

  的確與平常的並無兩樣但是我們可以將兩個相互獨立的類聯系起來比如

  

  Project::Module::User; Project::Module::Blog;

  這樣就能從語言本身更容易描述和理解變量類之間的關系從而避免了傳統上的 Project_Module_Blog 這樣冗長的命名方式
上面的說明可能很難說明使用命名空間帶來了什麼好處新增加的 use 和 as 關鍵字或許能更好的說明問題use 和 as 語句可以引用和聲明 命名空間的別名比如上述的控制器中實例化類的代碼可以這樣寫

  

  use Project::Module; $user = new Module::User(); $user>register($register_info);

  甚至

  

  use Project::Module::User as ModuleUser; $user = new ModuleUser; $user>register($register_info);

  類中的常量也可以通過命名空間訪問比如上述類中的 STATUS_OK 就可以通過命名空間

  

  Project::Module::User::STATUS_OK

  訪問進一步的也可以用別名簡化那麼長的變量名稱

  

  use Project::Module::User::STATUS_OK as STATUS_OK; echo STATUS_OK;

  順便提下超空間(The Global Namespace)的概念所謂的超空間就是沒有指定命名空間的變量類和函數比如

  

  function foo() { }

  這的函數可以使用 foo() 執行的同時也可以使用 ::foo(); 這樣執行

  最後配合使用 autoload 函數即可載入指定命名空間的類簡單的函數如下

  

  function __autoload( $classname ) { $classname = strtolower( $classname ); $classname = str_replace( :: DIRECTORY_SEPARATOR $classname ); require_once( dirname( __FILE__ ) / $classname classphp ); }

  這樣比如調用

  

  __autoload(Project::Module::User);

  就可以自動載入 Project_Module_Userclassphp 文件


From:http://tw.wingwit.com/Article/program/PHP/201311/21303.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.