2011-01-23 2 views
0
class Test { 
     private $arr; 
     function __construct() { 
      $this->arr = array('test'); 
     } 

     function getArr() { 
      return $this->arr; 
     } 
    } 
    $a = new Test(); 
    $b = $a->getArr(); 
    $b[0][0] = 'a'; 
    $s = $a->getArr(); 
    echo $s[0] 

Почему этот тест эха вместо аэста? Является ли PHP копировать массив и содержимое массива при его возврате? Как получить массив, в котором я могу изменить строки и отразить это в объекте?Ссылка на php по сравнению с значением

ответ

5

Возвращая и назначая по ссылке:

class Test { 
    //... 
    function &getArr() { 
     return $this->arr; 
    } 
} 
$a = new Test(); 
$b =& $a->getArr(); 
$b[0][0] = 'a'; 
$s = $a->getArr(); 
echo $s[0]; 

ли PHP скопировать массив и содержимое массива при возвращении его?

С точки зрения программиста, он работает так, как будто возвращение копирует значение, за исключением случаев, когда возвращается по ссылке. Что касается реализации, есть оптимизации, которые позволяют избежать этого, если это не влияет на поведение сценария.

+0

+1 Красиво сформулированные. – NikiC

Смежные вопросы