我正在使用ge_called_class
hack来允许在PHP 5.2版中找到后期静态绑定(找到here)。
我的代码中有以下内容:
# 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
函数无法读取代码的扩展部分。
答案 0 :(得分:0)
如果您使用的是eval,那么您的解决方案是错误的。
为什么你的非评估版本不起作用?出了什么问题?什么是完整和完整的错误消息?
用户提供的get_called_class
版本执行回溯并尝试打开调用者的文件以确定类名。 eval失败的原因是因为eval回溯不提供文件名。
(编辑:另外,get_called_class
hack非常黑客。有没有理由你不能使用5.3?)
您是否尝试过使用call_user_func? call_user_func(array($ac, 'find'), 'all')
应使用参数find
为$ac
中包含的类名称调用静态方法'all'
。另请参阅callback pseudo-type, and the "Type 2" example in specific