如何显示命名空间使用错误


How to show namespace-use errors?

use引入的别名不存在时,是否有任何方法可以获得任何类型的错误,无论是异常、错误代码还是日志记录?

例如,我尝试了这个(即使用我所知道的所有错误信号):

<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(E_ALL);
use 'Foobar as Frob; // 'Foobar is actually unknown
print("still here'n");

连同Bash:中的这条命令行

display_errors=on php love.php

并得到:

still here

作为唯一的输出。我查看了php_errors.log,但什么都没有。

PHP设计者,在他们非常重视的理智中,肯定想到了什么?

我知道use只是PHP世界中别名的别名,但我不明白为什么完全合格的裁判不应该出现错误。

use语句本身并没有做任何事情。他们所做的只是将一个同名名称别名为您选择的另一个名称,从此以后,您可以使用缩短的别名而不是全名。就这样,什么都没发生。此时类/函数/文件实际上并没有被加载,也没有进行任何其他类型的验证。这是因为有很多方法可以加载别名所指的实际类,您可能希望稍后在事后进行加载。最有可能的是使用自动加载器,它会在首次实际使用类时尝试加载该类。

所以:不,除了尝试使用类之外,没有其他方法。

$frob = new Frob; // Fatal error: class Foobar not found

PHP不会报告任何错误,因为您的代码中没有错误。

use声明说Frob只是'Foobar的另一个名称。它只是一个声明,PHP不会尝试加载'Foobar,也不会检查它是否存在。

只要在代码中不使用Frob'Foobar,那么use声明就没有任何作用。

但如果你尝试使用它:

$frob = new Frob();

并且CCD_ 14不是类,则确保CCD_。

use声明的工作原理与文件系统中的符号链接类似。您可以创建文件a,它是指向b的符号链接,只要您不尝试从a(或b)读取,就没有人关心b是否存在。