使用 use 和将 class 路径传递给方法之间有区别吗?

Is there a difference between using use and passing the class path to a method?

在 PHP 中有两种使用命名空间 classes 的方法:

使用导入 (use) 声明:

use The\Class\NameSpace\MyClass;
...
public function myFunction(MyClass $myClass) {
    // Things to do
}

每次使用 class 时都使用完全限定名称:

public function myFunction (\The\Class\NameSpace\MyClass $myClass) {
    // Things to do
}

就性能而言,哪种方法更好?

这两种方法在功能上是等同的。

两者都没有性能优势。

代码在执行前编译,两种风格都不会影响编译或执行时间。

自己验证很简单,编写一个非常简单的基准测试:

// Foo.php
namespace Bar;

class Foo
{

    public int $a;
    public function __construct(int $a)
    {
        $this->a = $a;
    }
}
// test.php
require 'Foo.php';

function footest(Bar\Foo $a): void
{
    $a->a++;
}

$t1  = microtime(true);
$foo = new Bar\Foo(1);
for ($i = 0; $i < 200000000; $i++) {
    footest($foo);
}
$t2 = microtime(true);

echo $t2 - $t1;

只需 运行 按原样,然后再次使用导入 (use) 语句,您将获得几乎相同的结果。

如果您将 classpath 传递给某个方法,则 class 将仅在该方法内部可用。使用 use 关键字只允许您在 class 中的任何位置使用 class 您正在编写代码的地方。因此,如果您多次使用 class X在另一个 class 中最好使用 use 来删除代码中的冗余。

这是我能找到的唯一区别。除此之外的功能保持不变。