繁体   English   中英

在PHP类的开头明确定义所有使用的类和名称空间有什么好处?

[英]Is there any benefit from explicitly defining all used classes and namespaces at the beginning of PHP class?

考虑以下两类:

namespace Foo\Bar;

use LogicException;
use Memcached;

class Baz extends Memcached
{
    public function testBaz()
    {
        throw new LogicException('Not implemented');
    }
}

相同的类可以写成:

namespace Foo\Bar;

class Baz2 extends \Memcached
{
    public function testBaz()
    {
        throw new \LogicException('Not implemented');
    }
}

这两个类别的表现是否有差异? 如果我们使用Composer的优化自动加载怎么办?

还请考虑以下两个类:

namespace Foo\Bar;

use Acme\Demo;

class Kaz
{
    public function init(Demo\UnitA $unitA, Demo\UnitB $unitB)
    {
        // do something
    }
}

可以将其编码为:

namespace Foo\Bar;

use Acme\Demo\UnitA;
use Acme\Demo\UnitB;

class Kaz2
{
    public function init(UnitA $unitA, UnitB $unitB)
    {
        // do something
    }
}

同样是同样的问题:两者之间在性能上有差异吗? 如果我们使用Composers优化的自动加载怎么办?

为了澄清问题:性能有变化吗?

我知道用途是什么,如何为类名加上别名等。我只是想知道使用一种或另一种方法会对性能产生影响。

use运算符导入一个外部完全限定名称,或在您的名称空间中为其指定别名。 使用类时会加载它们,而不是在导入时加载它们。 因此,它不会对自动加载产生任何影响。

但是在代码中使用较短的类名是有好处的,请随时使用它。

更新资料

导入是在编译时执行的,因此,如果您使用的是诸如APC或OPcache之类的任何类型的操作码缓存,则性能不应有任何差异(即使您不使用任何操作码缓存,也不使用use operator也应该是微不足道的更改) 。

顺便说一句,如果您担心代码的性能,最好的方法是使用探查器。 它们有很多,例如xdebugblackfire 我个人更喜欢使用xhprof

主要优点:您不必写太多。 对于简单的情况

use \classname;

那只是一个反斜杠,但是有了更多嵌套的命名空间,它可以节省时间

use \framework\section\library\someotherclass;

另外,您可以模拟类,更改使用的类,而不必在整个代码中进行更改,或者使用不同的名称两次使用一个类:

use \framework\section\library\fakeclass as realclass;

详细信息: php名称空间导入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM