2009-11-07 23 views
10

命名空間真的很有用,PHP直到最近的幾個版本AFAIK都沒有支持它們。
當我使用Zend Framework時,我必須記住長名稱,下劃線爲 - 比如Zend_Form_Element_ButtonZend_Form_Decorator_HtmlTag等等。
如果我使用的命名空間,這是可能的,所以更容易:如何在Zend Framework中使用名稱空間?

 
namespace Zend { 
    class something { 
    // ... 
    } 
} 

namespace Zend\Form { 
    class something { 
    // ... 
    } 
} 

namespace Zend\Form\Element { 
    class Button { 
    // ... 
    } 
} 

,並使用它我這樣做:

 
use Zend\Form\Element\Button; 
$btn1 = new Button(); 

所以我的問題是,是平凡可能 ,考慮到自動裝載機系統和Zend Framework內部存在的許多元類「黑魔法」,到用名稱空間重寫代碼的結構,然後有更明智的類名?
問題不在於類名的長度--Eclipse/Netbeans/Aptana處理得非常好,它是長名是的刺激。
如果您使用的某些類別在名稱中有相似的部分,在一段時間後趨於得到令人困惑
由於ZF是開源的許可,我不認爲Zend會介意代碼的命名空間版本,如果只是重命名和一些代碼重組可以實現

+0

你爲什麼把這個標記爲社區維基? – 2009-11-07 03:07:19

+0

估計中的重大錯誤。咄。我也無法撤銷社區地位。道歉。我希望這對許多人都有用,並進行了編輯等。這些並不重要,因爲鏈接的線程清楚地顯示出來。 – namespaceform 2009-11-07 14:51:24

回答

16

不平凡,沒有。

馬修緯二路O'Phinney寫了一篇關於一些問題的博客ZF將要面對的,如果當他們重構代碼,支持PHP 5.3命名空間:

http://weierophinney.net/matthew/archives/181-Migrating-OOP-Libraries-and-Frameworks-to-PHP-5.3.html

Abstract是一個保留在PHP中的字。 接口也是如此。考慮 這個特別aggregious例如:

namespace Zend::View 

abstract class Abstract implements Interface 
{ 
    // ... 
} 

我們有兩個保留字有:AbstractInterface

Zend框架中充滿了名爲AbstractInterface的類。他們將不得不做大量的向後不兼容的重構更改,以使ZF代碼支持命名空間。

此外,由於反斜線在字符串元字符,是基於類名動態加載類的任何代碼,如Zend_Db::factory()Zend_Filter_Input,是因爲輕率的決定PHP核心團隊由不必要的難以實施,使用反斜線作爲命名空間分隔符。

+0

同意。我想知道爲什麼他們使用了反斜槓,當像§,〜或者其他組合這樣的字符能夠完成這項工作時... – 2009-11-07 13:02:33

+4

他們聲稱它只是單純可打印的ASCII字符,他們可以使用,而不會混淆解析器。其他所有角色在PHP中都有其他含義。儘管如此,我認爲反斜槓是一個不錯的選擇。在決定反斜槓之前,他們應該使用一系列兩個(或更多)字符。 – 2009-11-07 16:26:24

相關問題