PHP function_exists不起作用,返回false

时间:2016-07-14 19:43:57

标签: php

所以我在我的服务器上运行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,看看它是否有所作为。有什么想法吗?

3 个答案:

答案 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');