2011-05-30 149 views
4

只是一個關於使用PHP命名空間或類前綴的首選項的簡短問題。PHP類命名空間與前綴

<?php 
// ----- namespace ----- 
use My\Namespace; 
$object = new Namespace\Object; 

// ----- prefix with PR ----- 
$object = new PF_Object; //or 
$object = new PFObject; 

開發者更喜歡哪一種?我知道爲什麼命名空間的使用可以爲應用程序帶來很大的優勢,但在我看來也可能在PHP中造成相當大的阻礙。

謝謝!

+0

它過於臃腫的問題。可能來自命名空間的OOP編程世界像「Python」或「Java」的開發人員會更喜歡第一個,其他人可能會選擇第二個......這一切都取決於,你知道......儘可能多的人,儘可能多的意見。 – Nemoden 2011-05-30 13:30:37

+0

那麼所有使用真正的OOP語言的人都可能會避免使用PHP命名空間語法。但除了個人偏好之外,更重要的是如果你使用php 5.3([5%的服務器])(http://phpadvent.org/2010/usage-statistics-by-ilia-alshanetsky)支持。 – mario 2011-05-30 13:33:20

+0

@mario 5%使用PHP 5.3,這是一個令人震驚的統計:O – 2011-05-30 13:34:48

回答

2

用別名結合use

use My\Namespace\Foo as Foo; 

$object = new Foo; 

它也是有用的,像這樣:

namespace My\Debug\Stuff; 
use My\Production\Stuff\Foo as BaseFoo; 

class Foo extends BaseFoo {} 
+0

+1好答案! – Melsi 2012-12-16 09:21:08

0

顯然,沒有必要再使用下劃線來命名空間,所以我假設問題歸結爲「在類名中使用下劃線字符是個好主意」。

國際海事組織,答案是否定的,首先是因爲它看起來很醜(IMO),其次是因爲一些舊的類加載器可能會被包含下劃線的類名混淆。

0

以及 如果你正在運行PHP 5.2.X你只可以選擇2

,但如果你正在運行PHP 5.3.X你可以同時使用。

在我的情況下運行PHP 5.3.X我會使用該語言的新版本提供的功能。做一個類比可能是運行JAVA 1.6並且不使用泛型(或排序)

2

爲什麼你會考慮名稱空間的障礙?

在我看來,類前綴對於實現'in code'來說是一種實現名稱空間的機制。

較新的代碼現在可以選擇使用本機內置方式來處理名稱空間。我認爲這是一個更清潔的方法。

考慮這個流行又大開眼界的例子,讓遺留代碼使用命名空間:

// Using native namespace features to shorten class prefixes 

<?php 
use Sabre_DAV_Auth_Backend_PDO as AuthBackend; 
use Zend_Controller_Action_Helper_AutoComplete_Abstract as AutoComplete; 

$backend = new AuthBackend(); 
?> 
+0

我只是討厭在PHP中用於名稱空間分離的字符,讓它感覺就像在Windows系統上引用位置一樣。在處理名稱空間類方面,您也做了一個很好的工作,謝謝! – 2011-05-30 13:42:59