php - PHP 的 use 语句在加载类时是否会导致额外的工作?

标签 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 自动加载器的工作方式是否受到影响?

最佳答案

What does PHP do when working out the connection between the use of the use statement and a class it is supposed to be for?

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

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

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

Are PSR-0/PSR-4 autoloaders affected in the way they work when it comes to these two code samples?

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

关于php - PHP 的 use 语句在加载类时是否会导致额外的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22507303/

相关文章:

mysql查询结果的php if语句(检查查询是否返回任何内容)

php - YII 添加外键问题

php - 多选查询 MySQL

php - Composer psr-4 自动加载问题

php - PHP : no connection 中的 Propel 和 Composer

laravel - Laravel 4 中的自动加载助手

php - 无法使用php向mysql插入数据

php - PSR-2。什么时候大写目录?

php - Composer 不为库生成自动加载

PHP - 未找到命名空间,使用 Composer 自动加载项目