【小(xiǎo)編推薦】ThinkPHP3.2—>∏—命名空(kōng)間(jiān)

2014-06-26   |  ‍♥;  發布者:梁國(gu∑✔₹✔ó)芳   |  ≈β↑ 查看(kàn):3320次

Thinkphp

3.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):

  1. namespace Org\Util;
  2. class File {
  3. }

其所在的(de)路(lù)徑是(shì) ThinkPHP/Library/Org/Util/Fil₩≈±e.class.php,因此,如(rú)果我們實例化(huà)該類的(de)>↕↑話(huà):

  1. $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)

根命名空(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à):

  1. namespace My;
  2. class Test {
  3. public function sayHello(){
  4. echo 'hello';
  5. }
  6. }

Test類保存在 ThinkPHP/Library/My/Test.class.php,我們就(jiù)可(kě)以直接實例化(huà)和(hé)調用(yòng):✔•

  1. $Test = new \My\Test();
  2. $Test->sayHello();

模塊中的(de)類庫命名空(kōng)間α∏(jiān)的(de)根都(dōu)是(shì)以模塊名命名✔₩±,例如(rú):

  1. namespace Home\Model;
  2. class UserModel extends \Think\Model {
  3. }

其類文(wén)件(jiàn)位于 Application/Home/Model/Us λ<erModel.class.php

  1. namespace Admin\Event;
  2. class UserEvent {
  3. }

其類文(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à)設置:

  1. '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ú):

  1. class UserModel extends \Think\Model {
  2. }

特别注意:如(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)方式:

  1. $class = new \stdClass();
  2. $sxml = new \SimpleXmlElement($xmlstr);