Variabel PHP dalam fungsi anonim

119

Saya bermain-main dengan fungsi anonim di PHP dan menyadari bahwa mereka tampaknya tidak menjangkau variabel di luarnya. Apakah ada cara untuk mengatasi masalah ini?

Contoh:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

Ini akan menghasilkan "tidak ada". Adakah cara agar fungsi anonim dapat mengakses $variable?

einord
sumber

Jawaban:

277

Ya, gunakan penutupan :

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

Perhatikan bahwa agar Anda dapat mengubah $variabledan mengambil nilai yang diubah di luar lingkup fungsi anonim, itu harus direferensikan dalam closure menggunakan &.

nickb
sumber
Baru! Ini sintaks yang baru di PHP 5.3.
Rocket Hazmat
1
@Rocket Jadi, agar adil, adalah sintaks fungsi anonim yang sebenarnya (sebagai lawan create_function()) dan usekata kunci didokumentasikan (buruk) pada halaman dokumen yang sama yang menjelaskannya.
DaveRandom
4
Catatan singkat bagi mereka yang mungkin tidak tahu: Anda dapat menjatuhkan &ketika melewati suatu objek, karena mereka selalu melewati referensi ... dan jangan lupa petunjuk tipe Anda :) Misalnya:function() use (PDO $pdo) {
keyboardSmasher
@ Alliswell Tidak, ini hanya untuk objek, jika tidak, Anda harus meneruskan referensi untuk mengubah variabel. Lihat contoh ini .
nickb