Bir değişken bir başvuru ise PHP bilmek nasıl?

2 Cevap php

I want to call a function with call_user_func_array but i noticed that if an argument is a reference in the function definition and is a simple value in call_user_func_array, the following warning appears: Warning: Parameter 1 to test() expected to be a reference, value given

İşte ben yapmaya çalışıyorum ne basit bir örnek:

<?php
$a = 0;
$args = array($a);
function test(&$a) {
    $a++;
}
$a = 0;
call_user_func_array('test', $args);
?>

Benim soru: bir değeri (bu durumda $ args ilk değer) bir başvuru olup olmadığını nasıl bilebilirim?

2 Cevap

Hayır, sorun fonksiyonunun ilk parametre pass-by-referans (işlevini yani arayanın kapsamında argüman değiştirebilirsiniz) olmasıdır. Bu nedenle, bir değişken veya ilk argüman olarak atanabilir bir şey geçmelidir. Eğer array($a), sadece kopya değişkenin değerini $a gibi dizi oluşturduğunuzda dizideki bir yuvaya (0 olan). Bu $a herhangi bir şekilde değişkene geri ifade etmez. Eğer işlevini çağırdığınızda bunu yapıyoruz sanki Ve sonra, bu işe yaramazsa, hangi geçerli:

test(0)

Eğer gerçekten istedim, $a referans diziye koymak olabilir, ama biraz zor bulunuyor:

<?php
$a = 0;
$args = array(&$a);
function test(&$a) {
    $a++;
}
call_user_func_array('test', $args);
?>

Eğer dizi elemanı bir referans olduğunu, söylerdim nasıl gibi ... o kadar da zor değildir. Sen var_dump() dizi yapmak, ve "&" için arama yapabilir symbol:

> var_dump($args);
array(1) {
  [0]=>
  &int(1)
}

Bu PHP dokümantasyon sayfasındaki yorum atın:

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