我在检查函数存在时遇到问题 - 我知道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].');');
需要进行评估,因为输入是一个字符串。
答案 0 :(得分:6)
在SDBApplication
method_exists($this->Player, 'Play');
答案 1 :(得分:2)
function_exists()和method_exists()适用于此类检查。第一个是常规函数,第二个是OOP函数。