PHP类命名空间与前缀

时间:2011-05-30 13:27:41

标签: php class namespaces naming-conventions prefixes

关于您喜欢使用PHP名称空间或类前缀的快速提问。

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

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

开发人员更喜欢哪个?我知道为什么命名空间的使用可以为应用程序带来很大的好处,但在我看来,PHP也是一个很大的障碍。

谢谢!

4 个答案:

答案 0 :(得分: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 {}

答案 1 :(得分:2)

为什么要将名称空间视为障碍?

在我看来,类前缀似乎是一种实现“在代码中”实现命名空间的机制的黑客攻击。

现在,较新的代码可以选择使用本机内置的方式处理命名空间。在我非常谦虚的意见中,这是一种更清洁的方法。

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

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

答案 2 :(得分:0)

显然,不再需要将下划线字符用于命名空间,所以我想问题归结为“在类名中使用下划线字符是个好主意”。 / p>

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

答案 3 :(得分:0)

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

但如果您正在运行PHP 5.3.X,则可以同时使用它们。

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