get_used_class hack 不适用于 eval-code

发布于 2024-09-05 11:44:54 字数 560 浏览 9 评论 0 原文

我正在使用 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_used_class 函数。我收到一个错误,file 函数无法读取代码的评估部分。

I am using a ge_called_class hack for allowing late static binding in php version 5.2 (found here).

I have the following in my code:

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

This will not work in php 5.2 for some reason, so I have done this:

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

This on the other hand will not work with the get_called_class function. I get an error that the file function can't read the evaled section of code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

滴情不沾 2024-09-12 11:44:54

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

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

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

(编辑:另外,那个 get_used_class hack 非常是一个 hack。你有什么理由不能使用 5.3 吗?)

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

If you're using eval, your solution is wrong.

Why won't your non-eval version work? What is going wrong? What is the full and complete error message?

The user-suppled version of get_called_class performs a backtrace and tries to open the caller's file to determine the class name. The reason the eval fails is because the eval backtrace doesn't supply a filename.

(Edit: Also, that get_called_class hack is very much a hack. Is there a reason you can't use 5.3?)

Have you tried using call_user_func? call_user_func(array($ac, 'find'), 'all') should call the static method find for the class name contained in $ac with the paramater 'all'. See also the callback pseudo-type, and the "Type 2" example in specific

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文