下面描述的情况在大约50%的浏览器中导致PHP出现致命错误,而在其他浏览器中代码运行正常。没有使用浏览器或任何客户端信息嗅探。据我所知,这是不可能的(PHP运行方式取决于客户端浏览器)。问题已经解决,但我仍然想要确切了解这是如何发生的。
因此index.php包含2个文件:
include('a.php');
include('b.php');
a.php只会:
the_function();
b.php:
function the_function(){
//code
}
50%的浏览器中的致命错误是a_function未在a.php中定义,因此a.php在包含时立即执行。而在其他浏览器中,它似乎首先包含所有php文件,然后才开始执行。
如果我没记错,他们是Mac Safari,Mac Chrome和IE,但我甚至不知道这种行为是否在不同机器上的相同浏览器之间共享。
当然问题是通过切换包含的顺序来解决的。但我仍然想知道为什么会这样。
答案 0 :(得分:1)
不是100%肯定,但据我所知,当PHP代码缓存在APC或其他字节码缓存中时会发生此行为。出于这个原因,有时代码已经被缓存,并且函数在开始时可用。
在PHP中,您可以在调用它之后定义函数,如果您在同一个文件中,它可以正常工作。 示例:https://3v4l.org/m951d
因此,它不依赖于浏览器,它取决于php脚本的当前缓存状态。