Php 属性值作为类名给出错误

Php 属性值作为类名给出错误,php,error-handling,version,Php,Error Handling,Version,我已经创建了delete.php页面,该页面将接受类名和id,如下所示: if(isset($_GET['id']) && is_numeric(trim($_GET['id'])) ) { $id = $_GET['id']; } else{ redirect_to($back); } if(isset($_GET['cls']) && class_exists($_GET['cls']) ) { $class = $_GET['

我已经创建了delete.php页面,该页面将接受类名和id,如下所示:

if(isset($_GET['id']) && is_numeric(trim($_GET['id'])) ) {
    $id = $_GET['id'];
}
else{
    redirect_to($back);
}   
if(isset($_GET['cls'])  && class_exists($_GET['cls']) ) {
    $class = $_GET['cls'];
}
else {

    redirect_to($back);
}
然后我将创建一个对象并调用其delete方法:

$object = $class::find_by_id($id);
$object->delete();
它在我的本地主机(wamp服务器)上运行良好。 然而,当我把它上传到我的主机(PHP5.2)上时,它在我调用静态函数$class::find_by_id($id)的行上给了我这个错误:
分析错误:语法错误,意外的T_PAAMAYIM_NEKUDOTAYIM。如何解决这个问题?

您可能正在处理两个不同版本的PHP。WAMP随5.3提供,其中允许使用
$class::find\u by\u id($id)
,另一方面,PHP5.2不喜欢它

请尝试以下方法:

$object = call_user_func(array($class,'find_by_id'),$id);
如果这不起作用(我不明白为什么不起作用),您可以始终使用eval(即使eval不好):


当然,最好的解决方案是在您的服务器上升级到PHP>=5.3,但您可能无法控制它。

确实执行
$object=call\u user\u func(数组($class,'find\u by\u id),$id)工作?是的,它工作了,谢谢回复。非常感谢!成功了。我太担心了,因为我有很多基于这个函数的语句。现在我感觉好多了。呵呵。。。你刚才提出的方法背后的魔力是什么?我以前从未见过它。我将把它作为练习留给读者,但是。
eval("\$o=$f::find_by_id(\$id);");