使用 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
来删除代码中的冗余。
这是我能找到的唯一区别。除此之外的功能保持不变。
在 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
来删除代码中的冗余。
这是我能找到的唯一区别。除此之外的功能保持不变。