我正在使用一个 ge_called_class hack允许在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 函数无法读取代码的评估部分。

有帮助吗?

解决方案

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

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

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

(编辑:还有,那个 get_called_class hack 就是一种 hack。有什么理由不能使用 5.3 吗?)

你有没有尝试过使用 调用用户函数? call_user_func(array($ac, 'find'), 'all') 应该 调用静态方法 find 对于包含在中的类名 $ac 与参数 'all'. 。另请参阅 回调伪类型,以及具体的“类型2”示例

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top