PHP 5.1.6 ArrayAccess hata nesnenin üzerinde yineleme zaman

1 Cevap php

PHP 5.1.6 üzerinde bir siteyi geliştirmek için yaşıyorum ve ben sadece 5.2 + üzerinde olmuyor Sitemde bir hata geldim. Foreach () bir nesne üzerinde yineleme için kullanırken, ben hata şu olsun: "Önemli hata: post / pre arttırma / eksiltme diziler olarak kullanılan nesneleri referans değerler dönmelidir ..."

Herkes bu soruna nasıl biliyor mu?

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

1 Cevap

Php belgeleri açıklamalar buldum, bu bir hata gibi görünüyor:

En azından PHP 5.1, ArrayAccess uygulayarak nesneleri referans nesneleri döndürmek unutmayın. Bkz http://bugs.php.net/bug.php?id=34783. Eğer böyle bir kod varsa

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

$ y gerçek bir dizidir sürece o zaman bu (bildiğim kadarıyla söyleyebilirim) always başarısız olur - $ y ArrayAccess uygulayan bir nesne ise o çalışamaz. Referans tarafından offsetGet () işlevi döndürür, sen ölümcül hata alırsanız "Sınıfım Bildirgesi :: offsetGet () ArrayAccess bu uyumlu olmalıdır :: offsetGet ()". Eğer değerine göre döndürmek için çalışırsanız, ancak, (çelişkili) ölümcül hata, en azından PHP benim versiyonu, "post / pre arttırma / eksiltme diziler olarak kullanılan nesneler referans değerlerini geri dönmeli" olsun.

Bu dizilerle ilgili rasgele kod almak ve bir dizi için kendi bir nesne yerine denemek, normal bir dizi tüm fonksiyonları de başarısız değildi bile (ki böyle, ya da en azından bazı nedenle mümkün değildir .)