PHP的use语句在加载类时会导致额外的工作吗?

时间:2014-03-19 13:25:08

标签: php autoload psr-0 psr-4

代码示例1

use Outline\Drawing;
$var = new Drawing();

代码示例2

$var = new Outline\Drawing();

问题:

如果我在示例1中使用代码,PHP是否会使硬件更难工作(查找更多文件或执行更多处理)?我确信某些事情已经完成,即使它处于某些代码的级别,可以确定哪个use行与哪个类匹配。我想知道到底发生了什么。

简而言之:

  • 在使用use语句和它应该用于的类之间建立连接时,PHP会做什么?
  • PSR-0 / PSR-4自动装载机在这两个代码示例中的工作方式是否会受到影响?

1 个答案:

答案 0 :(得分:4)

  

PHP在使用use语句和它应该用于的类之间的连接时做了什么?

use语句实际上并没有将名称空间/类加载到您的文件中。它只是设置一个别名列表来引用该命名空间中的类。

当遇到尚未声明的类时,它会使用该别名列表来尝试完全限定类名(前缀替换)。如果它找不到该类的别名,它将使用当前作用域的命名空间来限定类名。

只有当类名完全合格时,php才会尝试自动加载类(调用可能已定义的各种自动加载器)。

  

PSR-0 / PSR-4自动加载机在这两个代码示例中的工作方式是否会受到影响?

不,自动加载器的工作方式不会受到代码示例差异的影响,因为php会以完全相同的参数调用自动加载器。