PHP fonksiyon içerisinde bir başvuru nasıl ayarlanır?

2 Cevap php

Ben bir işlevi bir başvuru ayarlamak çalışıyorum. Ama bu çalışma almak mümkün değilim.

Kod Denedim:

function set(&$x, &$y)
{
    $x =& $y[2];
}

$y = array(
    0,
    1,
    array('something')
);

$x = array('old_val');
print "1. inited, x is:\n";
print_r($x);

set($x, $y);

print "\n2. now, x is: ";
print_r($x);

Çıktı:

1. inited, x is:
Array
(
    [0] => old_val
)

2. now, x is: Array
(
    [0] => old_val
)

I am expecting the value of $x to be same as $y[2]. Also, any further modification to $x should change $y[2]. (As in pointer assignment in C: x = &y[2]; ) What am I doing wrong? Any suggestions appreciated.

Edit: actually, the function set() in the test code is a simplified one for my testing purpose. It is actually select_node(&$x, &$tree, $selector) : This will select a node from the tree which matches $selector and assigns it to $x.

2 Cevap

Kaynaklar göstericisi değil, ve biraz daha farklı hareket.

Ne oluyor seti () fonksiyonu içindeki $ x değişkeni $ y aynı konuma bağlı olan [2], ama set içinde $ x () () set dışında $ x aynı olmadığıdır. Her ikisi de aynı yere gelin, ama sadece artık alakalı kez set () ile döner kümesinin içinde bir (), güncelledik. Bu işlev içinde yok olarak çağrı kapsamında bind $ x hiçbir yolu yoktur.

Bkz: http://ca3.php.net/manual/en/language.references.arent.php

Eğer bir başvuru döndürmek için () set bildirmek isteyebilirsiniz:

function &set(&$x, &$y) {}

Ve bu gibi diyoruz:

$x =& set($x,$y);

Bkz http://ca3.php.net/manual/en/language.references.return.php

Burada yanlış bir şey yoktur. x fonksiyonu set() global değişken bir local takma ad x. Diğer bir deyişle, küresel x ve x fonksiyonu set () aynı değere işaret etmektedir. Bunu yaptıktan sonra:

$x =& $y[2];

Yerel x şimdi $y[2] değerine ancak işaret küresel x hala eski değerini işaret. Bu sayfayı okumak gerekir http://php.net/references