当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世界中 alias 的别名,但我不明白为什么完全合格的裁判不应该出错。
答案 0 :(得分:1)
use
这样的陈述并非真正做任何事情。他们所做的只是别名为您选择的另一个名称的命名空间名称,从而允许您引用缩短的别名而不是全名。就是这样。没有更多的事情发生。类/函数/文件此时实际上没有被加载,也没有进行任何其他类型的验证。这是因为有很多方法可以加载别名引用的实际类,并且您可能希望在以后执行此操作。最有可能使用自动加载器,它会在第一次实际使用时尝试加载。
所以:不,除了尝试使用课程之外别无他法。
$frob = new Frob; // Fatal error: class Foobar not found
答案 1 :(得分:1)
PHP不报告任何错误,因为代码中没有错误。
use
声明称Frob
只是\Foobar
的另一个名称。这只是一个声明,PHP
不会尝试加载\Foobar
或检查它是否存在。
只要您不在代码中使用Frob
或\Foobar
,use
声明就无效。
但是如果你尝试使用它:
$frob = new Frob();
和\Foobar
不是类,请确保PHP
将触发致命错误并停止执行脚本。
use
声明的工作方式与文件系统中的符号链接类似。您可以创建文件a
,该文件是b
的符号链接,只要您不尝试从a
(或b
)读取,就没有人关心b
是否存在。