当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
是否存在。