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();
                    }
                }
4

1 回答 1

0

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

请注意,至少在 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 版本中是这样。

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

于 2011-05-31T20:42:16.127 回答