检查功能是否存在

时间:2012-04-11 19:05:21

标签: php

我在检查函数存在时遇到问题 - 我知道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].');');

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

2 个答案:

答案 0 :(得分:6)

SDBApplication

的构造函数中以这种方式尝试
method_exists($this->Player, 'Play');

答案 1 :(得分:2)

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