包含和函数调用

时间:2010-10-04 15:05:56

标签: php

我只是想确认一些事情,因为我在另一台服务器上做过的测试动摇了我的理解,我希望有些东西可以工作但事实并非如此。请在下面的代码中查看问题。

<?php

function xyz(){
} 

include("test.php");
/*
* A function in the above include checks if the function abc function_exists(). 
* Will it return a true? What about for xyz?
*/

function abc(){
}

?>

全部谢谢

5 个答案:

答案 0 :(得分:3)

您可以将include视为将整个文件复制并粘贴到include语句所在的位置 所以,你在看:

function xyz(){
} 

var_dump(function_exists('xyz'));
var_dump(function_exists('abc'));

function abc(){
}

两者都返回true,如所示here(即:脚本中定义的函数可在任何点 1 访问)。

1 请参阅nikic对此例外的答案。

答案 1 :(得分:2)

在PHP中,函数在使用或引用之前不需要声明。只有一个例外:如果函数是有条件定义的(在if语句中),则该函数仅在执行if语句后才可用。 (但这是合乎逻辑的,因为PHP无法知道if是否会评估。)

请参阅manual

  

之前不需要定义函数   它们被引用,除了a   函数有条件地定义为   如下面的两个例子所示。

     

在a中定义函数时   有条件的方式如两者   显示的例子。它的定义必须是   在被叫之前处理。

答案 2 :(得分:0)

脚本从上到下进行解析。因此,当包含test.php时,xyz将存在,但abc将不存在。 Whups,我正在考虑其他事情,但NullUserException是正确的。加载页面上的所有函数都将根据function_exists()存在。

答案 3 :(得分:0)

abc存在于我检查其存在的任何地方。这可能是因为PHP引擎可能会解析代码并在执行任何其他操作之前先创建所有函数:它可能使用“function foobar()”读取所有行,然后执行其余代码

答案 4 :(得分:0)

即使在检查代码之后声明了函数,它看起来像是存在的函数。

<?php

echo function_exists('abc').PHP_EOL;
echo function_exists('xyz').PHP_EOL;

function xyz(){
} 

function abc(){
}

?>

我不知道为什么会这样,但可能是因为PHP代码在运行之前被编译成内部格式。因此,所有函数都将在编译之后和运行之前创建。

此致 阿林