如何显示名称空间使用错误?

时间:2015-06-25 08:06:38

标签: php

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 的别名,但我不明白为什么完全合格的裁判不应该出错。

2 个答案:

答案 0 :(得分:1)

use这样的陈述并非真正任何事情。他们所做的只是别名为您选择的另一个名称的命名空间名称,从而允许您引用缩短的别名而不是全名。就是这样。没有更多的事情发生。类/函数/文件此时实际上没有被加载,也没有进行任何其他类型的验证。这是因为有很多方法可以加载别名引用的实际类,并且您可能希望在以后执行此操作。最有可能使用自动加载器,它会在第一次实际使用时尝试加载。

所以:不,除了尝试使用课程之外别无他法。

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

答案 1 :(得分:1)

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

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

只要您不在代码中使用Frob\Foobaruse声明就无效。

但是如果你尝试使用它:

$frob = new Frob();

\Foobar不是类,请确保PHP将触发致命错误并停止执行脚本。

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