0

我正在使用ge_called_classhack 允许在 php 版本 5.2 中进行后期静态绑定(在此处找到)。

我的代码中有以下内容:

# db_record.php
$ac = "ForumThread";
$objects = $ac::find("all");

由于某种原因,这在 php 5.2 中不起作用,所以我这样做了:

# db_record.php
$ac = "ForumThread";
eval("\$objects = {$ac}::find('all');");

另一方面,这不适用于该get_called_class功能。我收到一个错误,该file函数无法读取已评估的代码部分。

4

1 回答 1

0

如果您使用的是 eval,则您的解决方案是错误的。

为什么您的非评估版本不起作用?出了什么问题?什么是完整和完整的错误消息?

用户提供的版本get_called_class执行回溯并尝试打开调用者的文件以确定类名。eval 失败的原因是 eval 回溯不提供文件名。

(编辑:另外,那个get_called_class黑客非常黑客。你不能使用 5.3 有什么原因吗?)

您是否尝试过使用call_user_funccall_user_func(array($ac, 'find'), 'all') 应该为包含在参数find中的类名调用静态方法。另请参阅回调伪类型,以及具体中的“类型 2”示例$ac'all'

于 2010-06-14T02:52:27.760 回答