2014-11-12 55 views
6

çalıştırmak Aşağıdaki kod: söndürüldüPHP değişken referans bulmaca

<?php 
$a = array('yes'); 
$a[] = $a; 
var_dump($a); 

:

array(2) { 
    [0]=> 
    string(3) "yes" 
    [1]=> 
    array(1) { 
    [0]=> 
    string(3) "yes" 
    } 
} 

çalıştırmak Aşağıdaki kod: söndürüldü

<?php 
$a = array('no'); 
$b = &$a; 
$a[] = $b; 
$a = array('yes'); 
$a[] = $a; 
var_dump($a); 

:

array(2) { 
    [0]=> 
    string(3) "yes" 
    [1]=> 
    array(2) { 
    [0]=> 
    string(3) "yes" 
    [1]=> 
    *RECURSION* 
    } 
} 

$ a değerini yeniden atandım, neden RECURSION dairesel referanslar var?

+1

Vay, stackoverflow ilginç bir şey! :). 1 !!! –

cevap

3

Referansı kaldırmak için unset numaralı telefonu aramanız gerekir. $a = array('yes');$a'dan sonra unset olmadan hala $b ile sınırlıdır ve hala referanslardır. Yani ikinci bölüm ilkiyle aynı davranışa sahiptir.

Ancak, dizilerdeki referansların potansiyel olarak tehlikeli olduğunu unutmayın. Sağ taraftaki referansı ile normal (referans olarak değil) ataması yapmak, sol tarafı referansına çevirmez, ancak diziler içindeki referanslar bu normal atamalarında korunur.

http://php.net/manual/en/language.references.whatdo.php