在下面的示例代码中,对函数o_h_loaded的调用在函数本身之前。这会产生致命错误:未捕获错误:调用未定义函数o_h_loaded()。
<?php
if ( !defined( "O_H" ) ) {
define( "O_H", "O_H" );
o_h_loaded();
function o_h_loaded() {
echo "o_h_loaded";
}
} /* end if */
如果我执行以下任何一项工作
我很想知道原因。
答案 0 :(得分:1)
首先,PHP解析文件以查找常见错误并设置符号。由于我对此没有权限,我相信 PHP会对符号进行第一级检查,并对语法合规性进行更深层次的检查。
在此前提下,如果删除if
语句,则所有代码都将成为第一级。函数调用将起作用,因为函数符号将被注册。在函数调用之前移动函数声明时仍然会出现if
语句。
如果在声明之前必须完全接听电话,可以在function_exists
支票中包装函数调用。
答案 1 :(得分:-1)
您需要在 之前定义 的功能,然后尝试使用它。
此外,您的defined
查询询问是否已定义CONSTANT而不是功能。
以下是代码的有效编辑:
<?php
//declare what the function is at the start of the page
function o_h_loaded() {
echo "o_h_loaded";
}
if ( !defined( "O_H" ) ) { // This call has nothing to do with
define( "O_H", "O_H" ); // The function declared above.
// Now call to the function declared already. Hence resolving the fatal error.
o_h_loaded();
} /* end if */
回答你的问题 - 它以这种方式工作的原因是PHP从上到下,从左到右读取文件。并且因为它不是类文件,所以数据和语法仅按接收顺序处理。