我不得不在PHP 5.1.6上开发一个网站,我刚刚在我的网站上发现了一个在5.2+上没有发生的错误。当使用foreach()迭代一个对象时,我得到以下错误:“致命错误:在post / pre递增/递减中用作数组的对象必须通过引用返回值...”
有谁知道如何解决这个问题?
$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();
}
}
答案 0 :(得分:0)
在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()的声明兼容”。但是,如果你试图让它按值返回,你得到(矛盾的)致命错误“在post / pre increment / decrement中用作数组的对象必须通过引用返回值”,至少在我的PHP版本中。
因此,不可能采用任意代码处理数组并尝试用自己的对象替换数组,即使所有正常的数组函数也没有失败(他们这样做,或者至少其中一些)。