如何检查类中的函数是否存在于另一个类中?

时间:2011-05-26 11:45:27

标签: php class error-handling eval

我在另一个内部的Class中有一个函数,这样我就可以在不同的文件夹中组织我所有的'模块引擎'并调用它们的功能。

例如,我有一个名为“ mdnewsletter ”的模块,模块中包含其他类,如:'setting','newsletter'等。

通常情况下,如果我不想获得ID为“5”的简报,我会这样做:

$res = $mdnewsletter->newsletter->get(5);
if($res===false) { /* error handler here */ }

/* otherwise, the code here */

但现在我有一个名为'mdapi'的模块。该模块的建议是安全地加载另一个模块的引擎并仅为模块执行命令。

我的问题在于此代码段:

            $response = @eval($eval);
            if($response===false && ( $error = error_get_last() )){
                $this->error[] = "mdapi->exec() | A função fornecida não é uma função válida";
                $can_exec = false;
                $eval = '';
                $response = false;
            };

当我得到执行字符串'mdnewsletter-> newsletter-> get'和其他var中的参数时,我无法使用method_exists()。我真的更喜欢阅读解析错误代码。

如果发生解析错误,php代码将挂起,我无法通知对方代码错误或发生错误。

我该如何解决这个问题?

编辑: 根据{{​​1}}回答,我编写了一个代码,动态检查函数后面的所有对象,然后用最后一个对象测试函数,如下所示:

Oktopus

1 个答案:

答案 0 :(得分:1)

我不会参与“它可能是不安全的事情”,但是你可以这样做:

//Exemple string : 
$parts = explode ('->', "object->property->testCall");
//How to test if it's callable
if (is_object($$parts[0]->$parts[1])){
    echo "it's an object";
    if (is_callable(array($$parts[0]->$parts[1], $parts[2]))){
        echo "it's callable";
    }
}