【问题标题】:PHP Class Namespaces vs PrefixesPHP 类命名空间与前缀
【发布时间】:2011-09-04 20:03:18
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 这个问题太臃肿了。可能来自 PythonJava 等命名空间 OOP 编程世界的开发人员会更喜欢第 1 名,其他人可能会选择第 2 名……这完全取决于,你知道……有多少人,就有多少意见。
  • 好吧,每个使用真正 OOP 语言的人都可能会避免使用 PHP 命名空间语法。但除了个人偏好之外,更多的是一个问题,即您是否使用支持 php 5.3 的 5% of servers 之一。
  • @mario 5% 使用 php 5.3,这是一个令人震惊的统计数据:O
  • 尽管那是去年年底。它现在很可能徘徊在 10 以上。

标签: php class namespaces naming-conventions prefixes


【解决方案1】:

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

在我看来,类前缀是一种在代码中实现命名空间机制的技巧。

较新的代码现在可以选择使用原生内置方式来处理命名空间。在我看来,这是一种更简洁的方法。

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

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

【讨论】:

  • 我只是讨厌 PHP 中用于命名空间分隔的字符,它让人感觉像是在 Windows 系统上的引用位置。您在处理命名空间类方面也很重要,谢谢!
【解决方案2】:

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

但如果你正在运行PHP 5.3.X你可以同时使用。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      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 {}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多