PHP预检版

时间:2015-01-09 10:33:44

标签: php

我有一个用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方法的核心,则会正确显示有关过期版本的错误消息。

1 个答案:

答案 0 :(得分:1)

如果文件是自动加载的,则必须立即对其进行解析。它可能包含需要运行的命令。如果无法解析,PHP无法知道下一步应该是什么。

加载文件时,PHP无法知道它只包含函数定义,并在调用它们之前跳过加载它们。它必须解析一切。

显然某事决定包含该文件。启动文件顶部的调试器,并查看导致其加载的文件。