我只是想确认一些事情,因为我在另一台服务器上做过的测试动摇了我的理解,我希望有些东西可以工作但事实并非如此。请在下面的代码中查看问题。
<?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(){
}
?>
全部谢谢
答案 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时,
Whups,我正在考虑其他事情,但NullUserException是正确的。加载页面上的所有函数都将根据xyz
将存在,但abc
将不存在。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代码在运行之前被编译成内部格式。因此,所有函数都将在编译之后和运行之前创建。
此致 阿林