我在另一个内部的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
答案 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";
}
}