get_used_class hack 不适用于 eval-code
-
27-09-2019 - |
题
我正在使用一个 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”示例
不隶属于 StackOverflow