1

我在检查 ia 函数是否存在时遇到问题 - 我知道 function_exists() 和 method_exists() 但无法获得我正在寻找的功能

我通过像 $MM->Player->Play() 这样的套接字连接传递函数。之后我评估它们并通过套接字连接返回结果。

我确实过滤了函数(必须以 $MM 开头,其他任何内容都将被拒绝),但我无法让我的代码检查该函数是否存在。这很重要,因为如果该函数不存在,服务器将崩溃。

有谁知道这个的解决方案??

提前致谢。

编码:

$MM = new SDBApplication;

在 SDBApplication 的构造函数中:

$this->Player = new SDBPlayer;

我尝试了以下方法来检查:代码:

method_exists($MM, "Player::Play"); function_exist("$MM->Player->Play);

即使函数存在,两者都返回 false

解决方案

$parts = explode('->', $string);
$numParts = count($parts)-1;
$object = '$MM';
for($i=0; $i < $numParts; $i++){
    $object .= '->'.$parts[$i];
}
$parts[$numParts+1] = preg_replace('(\\(.*\\))', '', $parts[$numParts]);
eval( '$check = method_exists('.$object.', '.$parts[$numParts+1].');');

它需要被评估,因为输入是一个字符串。

4

2 回答 2

6

在您的构造函数中尝试这种方式SDBApplication

method_exists($this->Player, 'Play');
于 2012-04-12T09:42:53.387 回答
2

function_exists()method_exists()用于此类检查。第一个用于常规函数,第二个用于 OOP 函数。

于 2012-04-11T19:10:53.330 回答