4

代码示例 1

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

代码示例 2

$var = new Outline\Drawing();

问题:

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

简而言之:

  • PHP在解决使用之间的联系时会做什么use在确定语句的使用与它应该用于的类
  • 当涉及到这两个代码示例时,PSR-0/PSR-4 自动加载器的工作方式是否受到影响?
4

1 回答 1

6

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

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

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

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

当涉及到这两个代码示例时,PSR-0/PSR-4 自动加载器的工作方式是否受到影响?

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

于 2015-01-10T18:40:33.360 回答