Php 检查函数是否存在

Php 检查函数是否存在,php,Php,我在检查函数是否存在时遇到了一个问题-我知道函数_exists()和方法_exists(),但无法获得我想要的功能 我通过一个套接字连接传递函数,比如$MM->Player->Play()。 之后,我评估它们并通过套接字连接返回结果 我确实过滤函数(必须以$MM开头,其他任何函数都将被拒绝), 但是我无法让我的代码检查函数是否存在。这很重要,因为 如果该函数不存在,服务器将崩溃 有人知道这个问题的解决方法吗 提前谢谢 守则: $MM=新的SDB应用程序 在SDBAApplication的构造函数

我在检查函数是否存在时遇到了一个问题-我知道函数_exists()和方法_exists(),但无法获得我想要的功能

我通过一个套接字连接传递函数,比如$MM->Player->Play()。 之后,我评估它们并通过套接字连接返回结果

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

有人知道这个问题的解决方法吗

提前谢谢

守则:

$MM=新的SDB应用程序

在SDBAApplication的构造函数中:

$this->Player=新的SDBPlayer

我尝试了以下方法进行检查: 守则:

method_存在($MM,“Player::Play”)
功能存在($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].');');
$parts=分解('->',$string);
$numParts=计数($parts)-1;
$object='$MM';
对于($i=0;$i<$numParts;$i++){
$object.='->'.$parts[$i];
}
$parts[$numParts+1]=预替换(“(\\(.\\)”,“$parts[$numParts]);
eval(“$check=method_存在(“.$object.”,“.$parts[$numParts+1]”;);

它需要求值,因为输入是一个字符串。

和用于这种类型的检查。第一个用于常规函数,第二个用于OOP函数。

和用于这种类型的检查。第一个用于常规函数,第二个用于OOP函数。

SDBApplication

method_exists($this->Player, 'Play');

sdbaapplication

method_exists($this->Player, 'Play');

你能给我们看一下你的代码和错误吗?这里已经很晚了,所以我明天会做第一件事。你能给我们看一下你的代码和错误吗?这里已经很晚了,所以我明天会做第一件事。要把输入分开,我必须使用爆炸。但是我想知道如果有人输入像
$MM这样的东西->DoesNotExists->Play()
它会给我正确的结果。我回家后会对它进行测试。就我个人而言,如果你的类完全依赖现有的方法,如果它不存在,我会从构造函数返回false,或者抛出错误。这与加载的类无关,而是过滤用户输入,这样服务器就不会崩溃。但我已经让它工作了,请参阅原始的post确实有效。要将输入拆分,我必须使用explode。但是我确实怀疑是否有人输入了类似
$MM->DoesNotExists->Play()的内容
它会给我正确的结果。我回家后会对它进行测试。就我个人而言,如果你的类完全依赖现有的方法,如果它不存在,我会从构造函数返回false,或者抛出错误。这与加载的类无关,而是过滤用户输入,这样服务器就不会崩溃。但我已经让它工作了,请参阅原帖