2010-05-13 4 views
0

PHP 5.1.6에서 사이트를 개발해야하는데 5.2.x에서 발생하지 않는 버그가 있습니다. foreach()를 사용하여 개체를 반복 할 때 다음 오류가 발생합니다. "치명적인 오류 : 게시/증가/감소의 배열로 사용되는 개체가 참조로 값을 반환해야합니다 ..."PHP 5.1.6 객체를 반복 할 때 ArrayAccess 오류가 발생했습니다.

이 문제를 해결할 수 있을까요? PHP는 문서 주석이 발견

  $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

예에서 $ f_type은 어디에서 오는가? –

+0

$ f_type은 인스턴스화 된 객체입니다 (위에 추가 된 코드). PHP 5.2에서이 모든 것이 잘 작동합니다. 그래서 반복의 다른 방법을 찾아야한다고 생각합니다 ... 간단한 for 루프가 – kenny99

답변

0

, 버그 것 같다 :

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 .

당신은 할 경우,이 것 (지금까지의 내가 할 수있는 다음

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

같은 코드 tell) $ y가 실제 배열이 아니면 않는 한 항상이 실패합니다. $ y가 ArrayAccess를 구현하는 객체이면 작동하지 않습니다. offsetGet() 함수가 참조로 반환되면 "Declaration of MyClass :: offsetGet()은 ArrayAccess :: offsetGet()"과 호환되어야합니다. 그러나 값으로 반환하려고 시도하면 "PHP는 내 버전에서 적어도"post/pre increment/decrement의 배열로 사용되는 객체는 참조로 값을 반환해야합니다 "라는 (모순 된) 치명적인 오류가 발생합니다.

따라서 배열을 다루는 임의의 코드를 가져 와서 모든 배열 함수가 실패하지 않은 경우에도 배열에 대해 자신의 개체를 대체하려고 시도 할 수 없습니다. 적어도 그들 중 일부).