2010-10-04 61 views
1

我只是想确认一些事情,因为我的理解被我在另一台服务器上做过的测试动摇了,我希望某些东西能够工作,但事实并非如此。请参阅下面的代码中的问题。包括函数调用

<?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(){ 
} 

?> 

感谢所有

回答

3

您可以将包含文件复制并粘贴到include语句所在的位置。
所以真的,你在看:

function xyz(){ 
} 

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

function abc(){ 
} 

两者均返回true,如证明here(即:在脚本中定义的函数都可以访问在任何时候)。

查看nikic的例外答案。

+0

谢谢您的确认,这是我的理解。在另一台服务器上的代码必须有其他错误,有些配置......无论如何,这个问题和解决问题一样好。 :) – Abs 2010-10-04 15:20:42

0

的脚本解析从上到下。所以当包含test.php时,xyz将存在,但abc不会。 Whups,我在想别的事情,但是NullUserException是正确的。根据function_exists(),加载页面上的所有功能都将存在。

+0

你到底在想什么? – NullUserException 2010-10-04 15:15:48

0

无论我检查它的存在,abc都存在。这可能是由于PHP引擎可能会解析代码并在doint之前首先创建所有函数:它可能会用“function foobar()”读取所有行,然后执行代码的其余部分

0

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

<?php 

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

function xyz(){ 
} 

function abc(){ 
} 

?> 

我不知道为什么会发生这种情况,但可能是因为PHP代码在运行之前被编译为内部格式。所以所有的功能将在编译之后和运行之前创建。

问候, 阿林

2

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

manual

功能不需要定义 之前被引用,除了当一个 函数有条件地定义为 ,如下面两个示例所示。

当一个函数被定义为 有条件的方式,例如显示的两个 示例。其定义必须在被调用之前处理为 。

+0

这不会属于这种特殊情况:if(function_exists('xyz')){'自从它调用内建的函数以来就存在。 – Abs 2010-10-04 15:26:01

+0

这会工作;)如果你有条件地引用一个函数就没关系。只有在*条件中定义了函数('if(false){function fooBar(){}}'),它才会起作用。 – NikiC 2010-10-04 15:30:39