考虑以下两个类:
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
}
}
同样的问题:这两者之间是否存在任何性能差异?如果我们使用作曲家优化的自动加载会怎样?
澄清问题:是否有任何性能变化?
我知道有什么用,如何别名类名等。我只是想知道使用一种/或另一种方法会降低性能。
use 运算符导入外部完全限定名称或在命名空间中为其指定别名。类是在使用它们时加载的,而不是在导入时加载的。因此,自动加载不会有任何区别。
但是在代码中使用较短的类名是一个好处,可以随时使用它。
更新
导入是在编译时执行的,因此如果您使用任何类型的操作码缓存(如 APC 或 OPcache),性能应该没有任何差异(即使您不使用任何操作码缓存,不使用 use operator
也应该是一个非常微不足道的变化)。
顺便说一句,如果您对代码的性能有疑虑,最好的办法是使用探查器。有很多像xdebug,blackfire。我个人更喜欢使用xhprof。
主要好处:你不必写那么多。对于简单的案例,例如
use 'classname;
这只是一个反斜杠,但有了更多的嵌套命名空间,它可以真正节省时间
use 'framework'section'library'someotherclass;
此外,您可以模拟类,更改使用的类而不必通过整个代码进行更改,或者使用一个具有不同名称的类两次:
use 'framework'section'library'fakeclass as realclass;
详细信息:PHP 命名空间导入