所以我在我的服务器上运行PHP 5.6,并且我正在尝试检查函数是否存在,当我输入此代码时。
<?php
$functionName = 'SalesWeek';
if (function_exists($functionName)) {
$functionName();
} else {
echo "No function exists for ".$functionName."\n";
}
function SalesWeek(){
echo "Hello!";
}
每次运行它都会失败。但是,如果我采用完全相同的代码并将其放在其他东西,即phptester.net,它可以正常工作。我正在使用codeigniter,所以我想也许它与此有关,所以我尝试将函数更改为public和private,看看它是否有所作为。有什么想法吗?
答案 0 :(得分:2)
|ATP Group|Business Event|Category|
|02 |A |AC |
|02 |A |AD |
|02 |A |EQ |
|ZM |A |AU |
|ZM |A |AV |
|ZM |A |AW |
|02 |B |AC |
|02 |B |AY |
|02 |B |EQ |
仅适用于顶级函数,而不适用于对象方法:
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
答案 1 :(得分:2)
技术上的功能(在野外)不是方法(又名&#34;类中的功能&#34;)。
function_exists()不检查类方法。它仅检查您正在使用的命名空间中的函数。
如果你想检查一个班级&#39;您需要使用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从上到下读取您的代码,但它会读取整个文件。因此,如果您在同一个文件中定义您的函数,它将会存在&#34;存在&#34;对于PHP。如果它在另一个文件中,则必须首先加载/包含该文件。
答案 2 :(得分:0)
如果您使用的是名称空间,请确保包括完整的合格名称:
function_exists('\myNameSpace\myFunctionName');