PHP 5.1.6 迭代对象时出现 ArrayAccess 错误

发布于 2024-09-01 00:54:10 字数 857 浏览 10 评论 0原文

我必须在 PHP 5.1.6 上开发一个网站,而我刚刚在我的网站中遇到了一个错误,而在 5.2+ 上不会发生该错误。使用 foreach() 迭代对象时,出现以下错误:“致命错误:在后/前增量/减量中用作数组的对象必须通过引用返回值...”

有谁知道如何解决此问题?

            $f_type = new Feeding_type_Model;
            $f_type->type = $post['feeding_type'];
            $f_type->quantity = $post['quantity'];
            $f_type->feeding_id = $feed->id;
            $f_type->save();

                if (strpos($post['feeding_type'], 'comm'))
                {
                    foreach ($post['commercial_brands'] as $brand)
                    {
                        $comm_food = new Commercial_food_Model;
                        $comm_food->brand = $brand;
                        $comm_food->feeding_type_id = $f_type->id;
                        $comm_food->save();
                    }
                }

I'm having to develop a site on PHP 5.1.6 and I've just come across a bug in my site which isn't happening on 5.2+. When using foreach() to iterate over an object, I get the following error: "Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference..."

Does anyone know how to get around this issue?

            $f_type = new Feeding_type_Model;
            $f_type->type = $post['feeding_type'];
            $f_type->quantity = $post['quantity'];
            $f_type->feeding_id = $feed->id;
            $f_type->save();

                if (strpos($post['feeding_type'], 'comm'))
                {
                    foreach ($post['commercial_brands'] as $brand)
                    {
                        $comm_food = new Commercial_food_Model;
                        $comm_food->brand = $brand;
                        $comm_food->feeding_type_id = $f_type->id;
                        $comm_food->save();
                    }
                }

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

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

发布评论

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

评论(1

月光色 2024-09-08 00:54:10

在php文档注释中发现了这个,这似乎是一个bug:

请注意,至少在 PHP 5.1 中,实现 ArrayAccess 的对象无法通过引用返回对象。请参阅 http://bugs.php.net/bug.php?id=34783 .

如果你有这样的代码

<?php
$x = &$y[0];
?>

(据我所知),除非 $y 是一个真正的数组,否则它总是会失败 - 如果 $y 是一个实现 ArrayAccess 的对象,它就无法工作。如果您的 offsetGet() 函数通过引用返回,则会出现致命错误“MyClass::offsetGet() 的声明必须与 ArrayAccess::offsetGet() 的声明兼容”。但是,如果您尝试让它按值返回,则会出现(矛盾的)致命错误“在后/前递增/递减中用作数组的对象必须按引用返回值”,至少在我的 PHP 版本中是这样。

因此,不可能采用处理数组的任意代码并尝试用自己的对象替换数组,即使所有普通数组函数都没有失败(它们确实失败了,或者至少其中一些函数失败了) )。

Found this in the php documentation comments, it seems to be a bug:

Note that at least in PHP 5.1, objects implementing ArrayAccess cannot return objects by reference. See http://bugs.php.net/bug.php?id=34783 .

If you have code like

<?php
$x = &$y[0];
?>

then this will (as far as I can tell) always fail unless $y is a real array -- it cannot work if $y is an object implementing ArrayAccess. If your offsetGet() function returns by reference, you get the fatal error "Declaration of MyClass::offsetGet() must be compatible with that of ArrayAccess::offsetGet()". If you try to have it return by value, however, you get the (contradictory) fatal error "Objects used as arrays in post/pre increment/decrement must return values by reference", at least in my version of PHP.

It is therefore not possible to take arbitrary code dealing with arrays and try to substitute an object of your own for an array, even if all of the normal array functions didn't fail as well (which they do, or at least some of them).

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