Ben "liste" örnek ister, ama "listesi" sadece bir atamanın sol tarafında çalışır. Bir değişken atamak istemiyorsanız, biz en iyi bizim kapsamını kirletiyor ve en kötü ihtimalle mevcut bir değer yazar, hangi geçici bir isim telafi etmek zorunda olacaktır:
list($x) = some_array();
var_dump($x);
Yukarıdaki $ x varolan herhangi bir değerin üzerine yazılır ve (biz üst düzey iseniz sonsuza kadar bu fonksiyon / yöntemin sonuna, ya) $ x değişkeni sürece bu kapsam aktif olarak asmak olacaktır. Bu call_user_func ve bir anonim işlevini kullanarak etrafında çalışmış olabilir, ama o aksak var:
var_dump(call_user_func(function($arr) { list($x) = $arr; return $x; },
some_array()));
Bunun gibi anonim işlevlerini kullanırsanız, biz aslında onlar pass-by-reference kullanmak bile, reset ve array_shift kurtulabiliriz. Bir işlevi çağırırken onun argümanlarını bağlayacaktır çünkü bu, ve bu argümanlar referans tarafından kabul edilebilir:
var_dump(call_user_func(function($arr) { return reset($arr); },
array_values(some_array())));
Call_user_func dahili bu geçici atama gerçekleştirecek Ancak, bu, aslında overkill. Bu bize tedavi sağlar pass-by-referans fonksiyonlar onlar pass-by-value, herhangi bir uyarı veya hata olmadan sanki:
var_dump(call_user_func('reset', array_values(some_array())));