为什么在使用if!defined时调用之前需要PHP函数

时间:2016-05-23 10:20:13

标签: php defined

在下面的示例代码中,对函数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 */

如果我执行以下任何一项工作

  1. 将通话移至功能
  2. 之后
  3. 注释掉if定义的测试
  4. 我很想知道原因。

2 个答案:

答案 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从上到下,从左到右读取文件。并且因为它不是类文件,所以数据和语法仅按接收顺序处理。