Anonim işlevlerdeki PHP değişkenleri


119

PHP'de anonim işlevlerle oynuyordum ve bunların dışındaki değişkenlere ulaşmadıklarını fark ettim. Bu sorunu aşmanın bir yolu var mı?

Misal:

$variable = "nothing";

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

echo $variable;  //output: "nothing"

Bu "hiçbir şey" vermez. Anonim işlevin öğesine erişmesinin herhangi bir yolu var mı $variable?

Yanıtlar:


277

Evet, bir kapatma kullanın :

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

$variableAnonim işlevin kapsamı dışında değiştirilen değeri değiştirebilmeniz ve alabilmeniz için, kapatmada kullanılarak başvurulması gerektiğini unutmayın &.


Bu yeni! PHP 5.3'te yeni olan sözdizimi.
Rocket Hazmat

1
@Rocket Yani, adil olmak gerekirse, gerçek anonim işlev sözdizimi (aksine create_function()) ve useanahtar kelime, onları tanımlayan aynı belge sayfasında (kötü bir şekilde) belgelenmiştir .
DaveRandom

4
Bilmeyenler için kısa not: &Bir nesneyi geçerken bırakabilirsiniz , çünkü bunlar her zaman referans olarak geçerler ... ve tip ipucunuzu unutmayın :) Örneğin:function() use (PDO $pdo) {
keyboardSmasher

@Alliswell Hayır, sadece nesneler içindir, aksi takdirde değişkeni değiştirmek için referansla geçmeniz gerekir. Bu örneğe bakın .
nickb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.