PHP类名称空间与前缀



只是一个关于您喜欢使用PHP名称空间或类前缀的快速问题。

<?php
// ----- namespace -----
use MyNamespace;
$object = new NamespaceObject;
// ----- prefix with PR -----
$object = new PF_Object; //or
$object = new PFObject;

开发人员更喜欢哪一个?我知道为什么名称空间的使用可以给应用程序带来巨大的优势,但在我自己看来,在PHP中也会成为一个障碍。

谢谢!

use与别名组合

use MyNamespaceFoo as Foo;
$object = new Foo;

它也很有用:

namespace MyDebugStuff;
use MyProductionStuffFoo as BaseFoo;
class Foo extends BaseFoo {}

为什么会认为名称空间是一个障碍?

在我看来,类前缀就像是一种在代码中实现名称空间的机制。

较新的代码现在可以选择使用本机内置的方式来处理名称空间。在我看来,这是一种更加干净的方法。

考虑一下这个流行但令人大开眼界的例子,它允许遗留代码使用名称空间:

// 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();
?>

很明显,不再需要使用下划线字符来伪造命名空间,所以我想问题可以归结为"在类名中使用下划线字符是个好主意吗"。

IMO,答案是否定的,首先是因为它看起来很难看(IMO),其次是因为一些旧的类加载器可能会被包含下划线的类名弄糊涂。

井如果您正在运行PHP 5.2.X,则只有选项2

但如果您正在运行PHP 5.3.X,则可以同时使用这两种功能。

在我运行PHP 5.3.X的情况下,我将使用该语言的新版本提供的功能。做一个类比可能是运行JAVA 1.6,并且不使用泛型(或类似的)

最新更新