gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:36:04 24 4
gpt4 key购买 nike

我在另一个类内部有一个函数,这样我可以将我所有的“模块引擎”组织在不同的文件夹中,并将它们称为函数。

例如,我有一个名为“”的模块mdnewsletter ',即 模块内有其他类 比如:“设置”、“时事通讯”等。

通常,如果我不想获得 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 代码将挂起,我无法通知对方代码错误或发生错误。

我怎样才能解决这个问题?

编辑:
基于 Oktopus回答,我编写了一个代码,动态检查函数后面的所有对象,然后用最后一个对象测试函数,如下所示:
            // Avaliar se a primeira parte é uma class e os restantes funcoes
$tmp = explode ('->', $tmp);

// Verificar se são objectos até à função (ultima string)
$obj = $$tmp[0];
for($i=0;$i<count($tmp)-1;$i++){
if($i!=0){
$obj = $obj->$tmp[$i];
}
if(!is_object($obj)){
$this->error[] = "mdapi->exec() | A variavel '".$tmp[$i]."' não é um objecto!";
$can_exec = false;
$eval = '';
$response = false;
}
}

// Verificar se a ultima variavel é uma função no ultimo objecto
if(!is_callable(array($obj, $tmp[count($tmp) - 1]))){
$this->error[] = "mdapi->exec() | A função pedida não foi encontrada no ultimo objecto!";
$can_exec = false;
$eval = '';
$response = false;
}

最佳答案

我不会说“这可能是不安全的事情”,但是您可以这样做:

//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";
}
}

关于php - 如何检查一个类中的函数是否存在于另一个类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com