
2014-06-26 |  ♥; 發布者:梁國(gu∑✔₹✔ó)芳 | ≈β↑ 查看(kàn):3320次
Thinkphp3.2版本全面采用(yòng)命名空(kōng)間(jiān)方式↓ ∏®定義和(hé)加載類庫文(wén)件(jiàn), σφ有(yǒu)效的(de)解決多(duō)個(gè)模塊↑之間(jiān)的(de)沖突問(wèn)題,并且實現(xiàn)了(l<πe)更加高(gāo)效的(de)類庫自(zì)動加載機δ♠ (jī)制(zhì)。
命名空(kōng)間(jiān)的(de)概念必須了(le)解,否則會(hu★×δì)成為(wèi)3.2版本開(kāi)發的(dγ>e)重大(dà)障礙。
如(rú)果不(bù)清楚什(shén)麽是(shì)命名空(kōng)間∞♠(jiān),可(kě)以參考PHP手冊:P↓♠HP命名空(kōng)間(jiān)
由于新版完全采用(yòng)了(le)命名空(kōng)間(jiān ÷)的(de)特性,因此隻需要(yào)給類庫正确定義所在的(de)命名空αφ®(kōng)間(jiān),而命名空(kōng)間(jiān)的π×★↑(de)路(lù)徑與類庫文(wén)件(jiàn)的(de)目錄✘±↑一(yī)緻,那(nà)麽就(jiù)可(kě)以實現(xià"₩n)類的(de)自(zì)動加載。 例如(rú),Org\Util\File類的(de)定義為(wèi):
namespace Org\Util;class File {}
其所在的(de)路(lù)徑是(shì) ThinkPHP/Library/Org/Util/Fil₩≈±e.class.php,因此,如(rú)果我們實例化(huà)該類的(de)>↕↑話(huà):
$class = new \Org\Util\File();
系統會(huì)自(zì)動加載 ThinkPHP/Library/Org/Util/File.class♣".php 文(wén)件(jiàn)。
注意:和(hé)3.1不(bù)同,我們無需在實例化(huà)命γα名空(kōng)間(jiān)定義的(de)♥®♥±類之前導入類庫文(wén)件(jiàn)了(le)。
根命名空(kōng)間(jiān)是(s§<hì)一(yī)個(gè)關鍵的(de)概念,以上(shàng)面¥♦♠ε的(de)Org\Util\File類為(wèi)例,Org就(jiù)是(shì)一(yī)個(gè)根命名空(k♣± ōng)間(jiān),其對(duì)應的(de)初始命↑Ω名空(kōng)間(jiān)目錄就(jiù)是(shì)系統的(de)類庫$™β≥目錄(ThinkPHP/Library),Library目錄下(xià)面的(de)子(zǐ)目錄會(huì÷&)自(zì)動識别為(wèi)根命名空(kōng)間(jiān),這(z©α§hè)些(xiē)命名空(kōng)間(jiān)無需注冊即可(kě)使&<≤λ用(yòng)。
例如(rú),我們在Library目錄下(xià)面新增一(yī∞•)個(gè)My根命名空(kōng)間(jiān)目錄,然₹✘®後定義一(yī)個(gè)Test類如(rú)下(xià):
namespace My;class Test {public function sayHello(){echo 'hello';}}
Test類保存在 ThinkPHP/Library/My/Test.class.php,我們就(jiù)可(kě)以直接實例化(huà)和(hé)調用(yòng):✔•
$Test = new \My\Test();$Test->sayHello();
模塊中的(de)類庫命名空(kōng)間α∏(jiān)的(de)根都(dōu)是(shì)以模塊名命名✔₩±,例如(rú):
namespace Home\Model;class UserModel extends \Think\Model {}
其類文(wén)件(jiàn)位于 Application/Home/Model/Us λ<erModel.class.php。
namespace Admin\Event;class UserEvent {}
其類文(wén)件(jiàn)位于 Application/Admin/Event/U ÷±serEvent.class.php。
3.2.1版本以上(shàng)的(de)話(huà),允許設置對(duì)應用(yò$λ₩ng)類庫不(bù)使用(yòng)命名空(≠ ≤γkōng)間(jiān),你(nǐ)在配置文(wén)件(π≤✔jiàn)中進行(xíng)如(rú)下(xià)設置:
'APP_USE_NAMESPACE' => false,
那(nà)麽,所有(yǒu)的(de)應用(yòng)類庫不(bù)再需 '要(yào)使用(yòng)命名空(kōng)間(jiān)₽∑♦定義,但(dàn)繼承和(hé)調用(yòng)核心類和(hé)系統類的(≈₽de)時(shí)候,仍然需要(yào)使用(yòng)₩↑命名空(kōng)間(jiān),例如(rú):
class UserModel extends \Think\Model {}
特别注意:如(rú)果你(nǐ)需要(yào)在3.2版本¥ε中實例化(huà)PHP內(nèi)置的(↔∞÷de)類庫或者第三方的(de)沒有(yǒu)Ωδ₽★使用(yòng)命名空(kōng)間(jiān)定&¶♣義的(de)類,需要(yào)采用(yòng)下(xi←à)面的(de)方式:
$class = new \stdClass();$sxml = new \SimpleXmlElement($xmlstr);
