PHP function_exists不工作,并返回false
所以我在我的服务器上运行PHP 5.6,我试图检查一个函数是否存在,当我输入这段代码时。PHP function_exists不工作,并返回false
<?php
$functionName = 'SalesWeek';
if (function_exists($functionName)) {
$functionName();
} else {
echo "No function exists for ".$functionName."\n";
}
function SalesWeek(){
echo "Hello!";
}
我每次运行它都会失败。但是如果我把这个完全相同的代码放在别的东西上,例如phptester.net,它就可以正常工作。我使用codeigniter,所以我想也许它必须这样做,所以我试着改变公共和私人的功能,看看它是否有所作为。有任何想法吗?
function_exists()
仅适用于顶级的功能,而不是对象的方法:
<?php
function foo() { echo "foo\n"; }
class bar { function baz() { echo "baz in bar\n"; }}
var_dump(function_exists('foo'));
var_dump(function_exists('baz'));
输出:
bool(true) <--foo
bool(false) <--baz
也将用于嵌套函数工作:
function x() {
function y() { ... }
}
var_dump(function_exists('y')) -> bool(false)
技术上的功能(在野外)不是方法(又名“类中的函数”)。
function_exists()不检查类方法。它只检查你正在使用的命名空间中的函数。
如果你要检查你需要使用一个method_exists类的方法()http://php.net/manual/en/function.method-exists.php
也有是在PHP的顺序读。它是从上到下。因此,在上面的示例中,在您定义代码的最后3行之前,您正在查找的函数不存在。
**下面的例子是不正确的,请参阅编辑**
function_exists('myFunc'); //returns false
function myFunc(){}
function_exists('myFunc'); //returns true
希望这将清除事有点
编辑:
我刚刚发现了一个很奇怪的行为( PHP 5.6)
如果函数在同一个文件中:
<?php
function_exists('myFunc'); //returns TRUE
function myFunc(){}
function_exists('myFunc'); //returns TRUE
,如果它不是在同一个文件:
<?php
echo function_exists('myFunc') ;//returns FALSE
include 'test2.php';//assume myfunc() is defined in this file
echo function_exists('myFunc');//returns TRUE
所以我上面的第一答案似乎只是部分正确。 PHP自上而下读取您的代码,但它读取整个文件。所以,如果你在同一个文件中定义你的函数,它将“存在”为PHP。如果它在另一个文件中,则必须先加载/包含该文件。
我做了一些测试并更新了我的答案...... :) –
“我试着改变公共和私人的功能,看看它是否有所作为”你确定,你不是在谈论一种方法吗?函数(类之外)没有修饰符。 – tkausl
它在一个类的内部,但它的定义与上面我输入的一样。我只是试图把它放在函数之外,然后检查工作,但通话不。即,它表示函数存在,但然后我的调用$ functionName();不起作用。 – CMOS
如果您正在尝试检查@tkausl所说的方法,请选中[method_exists](http://php.net/manual/en/function.method-exists.php)。 – FirstOne