我有一个用PHP编写的框架,它检查当前安装的PHP版本并将其与所需版本进行比较,如果当前版本低于所需版本,则会出错。这很有用,因为我使用了旧版本中不可用的函数和语法。例如,这不适用于v5.2.2:
public static function array_flatten(Array $input){
$return = array();
array_walk_recursive($input, function($a) use (&$return) { $return[] = $a; });
return $return;
}// array_flatten
在我的框架v5.3.13中至少需要PHP,并且我使用v5.2.2进行测试 我的问题是在这种情况下,版本检查发生在所有其他操作之前。上面的关键代码位于一个单独的文件中,需要时自动加载。在我检查PHP版本的时候,没有任何内容包含那个单独的文件,当时PHP与它没有任何关系,但是我收到了错误:
解析错误:语法错误,第152行的D:\ Munka \ wamp \ www \ lmvc_trunk \ utils \ Utils.php中的意外T_FUNCTION
而不是我打算打印出来的过时版本消息。 (在此错误消息之后,我致电exit()
)
所以问题是:为什么在自动加载时解析了Utils.php,并且在exit()命令之前没有人调用它的任何方法(因此不应该包括它,因此不应该被解析)?
如果我注释掉array_flatten
方法的核心,则会正确显示有关过期版本的错误消息。
答案 0 :(得分:1)
如果文件是自动加载的,则必须立即对其进行解析。它可能包含需要运行的命令。如果无法解析,PHP无法知道下一步应该是什么。
加载文件时,PHP无法知道它只包含函数定义,并在调用它们之前跳过加载它们。它必须解析一切。
显然某事决定包含该文件。启动文件顶部的调试器,并查看导致其加载的文件。