4

关于您对使用 PHP 命名空间或类前缀的偏好的快速问题。

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

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

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

谢谢!

4

4 回答 4

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 {}
于 2011-05-30T13:31:55.920 回答
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();
?>
于 2011-05-30T13:38:12.740 回答
0

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

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

于 2011-05-30T13:34:23.983 回答
0

好吧,如果你正在跑步PHP 5.2.X,你只有选择 2

但如果你正在跑步PHP 5.3.X,你可以同时使用两者。

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

于 2011-05-30T13:36:04.460 回答