很多開源系統如osCommerce框架中,都會在其源碼中找到use這個關鍵字,如osCommerce框架中就在index.php文件中出現了這段源碼:
use osCommerce\OM\Core\Autoloader; use osCommerce\OM\Core\OSCOM;
其實,php的use關鍵字是自php5.3以上版本引入的。它的作用是給一個外部引用起別名。這是命名空間的一個重要特性,它同基於unix的文件系統的為文件或目錄創建連接標志相類似。
PHP命名空間支持三種別名方式(或者說引用):
1、為一個類取別名
2、為一個接口取別名
3、為一個命名空間取別名
這三種方式都是用 use 關鍵字來完成。下面是三種別名的分別舉例:
//Example #1 importing/aliasing with the use operator
<?php namespacefoo; useMy\Full\ClassnameasAnother; //thisisthesameasuseMy\Full\NSnameasNSname useMy\Full\NSname; //importingaglobalclass useArrayObject; $obj=newnamespace\Another;//instantiatesobjectofclassfoo\Another $obj=newAnother;//instantiatesobjectofclassMy\Full\Classname NSname\subns\func();//callsfunctionMy\Full\NSname\subns\func $a=newArrayObject(array(1));//instantiatesobjectofclassArrayObject //withoutthe"useArrayObject"wewouldinstantiateanobjectofclassfoo\ArrayObject ?>
注意的一點是,對於已命名的名字,全稱就包含了分隔符,比如 Foo\Bar,而不能用FooBar,而“\Foo\Bar”這個頭部的"\"是沒必要的,也不建議這樣寫。引入名必須是全稱,並且跟當前命名空間沒有程序上的關聯。
PHP也可以在同一行上申明多個,等同於上面的寫法
<?php useMy\Full\ClassnameasAnother,My\Full\NSname; $obj=newAnother;//instantiatesobjectofclassMy\Full\Classname NSname\subns\func();//callsfunctionMy\Full\NSname\subns\func ?>
還有值得一說的是,引入是在編譯時執行的,因此,別名不會影響動態類,例如:
<?php useMy\Full\ClassnameasAnother,My\Full\NSname; $obj=newAnother;//instantiatesobjectofclassMy\Full\Classname $a = 'Another'; $obj = New $a; // instantiates object of class Another ?>
這裡由於給變量$a 賦值了 'Another',編譯的時候,就將$a 定位到 Classname 了。
更詳細的用法讀者可以查閱php手冊或關注本站後續相關文章。
1. namespace Zend\Http\PhpEnvironment;
這句代碼定義了一個命名空間,你可以理解為定義一個名稱為 Zend\Http\PhpEnvironment 的域名。
在定義了之後,下面所申明的class, interface, const等都是在申明的這個“域”裡面的。當引用一個申明了命名空間的包含文件,想要調用這個裡面的東西,那就必須:
調整當前腳本也到這個域名裡,否則,就得用namesapce的全稱。
比如,inc.php 文件:
namespace Zend\Http\PhpEnvironment;
class Bar {}//定義了一個類
則其他文件調用時:
// 訪問Foo的第一種方法,用全稱
require 'inc.php';
$foo = new \Zend\Http\PhpEnvironment\Bar();
// 訪問Foo的第二種方法
namespace Foo; // 調整當前腳本到Foo這個ns域,而且namespace申明必須在第一句
require 'inc.php';
$foo = new Bar();
2. use關鍵字目的是使用ns的別名:
比如說,上面的
// 訪問Foo的第一種方法,用全稱
require 'inc.php';
$foo = new \Zend\Http\PhpEnvironment\Bar();
用uses後,寫法如下:
use \Zend\Http\PhpEnvironment as pe; //定義別名
$foo = new \pe\Bar(); //用短的別名來代替原來的
如果省略後面的as ....,那麼,就可以直接用最後一節的文字來代替,比如,上面的:
use \Zend\Http\PhpEnvironment; //定義別名
$foo = new \PhpEnvironment\Bar(); //用短的別名來代替原來的
================================================
php官方手冊中的相關內容:
在PHP中,namespace命名空間用來解決在編寫類庫或應用程序時創建可重用的代碼如類或函數時碰到的兩類問題:
1. 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
2. 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。
PHP 命名空間提供了一種將相關的類、函數和常量組合到一起的途徑。
PHP 命名空間支持有兩種使用別名或導入方式:為類名稱使用別名,或為命名空間名稱使用別名, 別名通過操作符 use 來實現。...余下全文>>
關鍵字就是棋盤上的棋子,你只可以用,不能改也不能自個往裡加
你想想我把卒子當車使,再擺四個馬跟你下,你干嗎?
所以PHP也不干!
不知你是否明白?
參考資料:www.gooddou.cn