PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

匿名PHP関数の親スコープから変数にアクセスする


「使用」 キーワードを使用して、変数を特定の関数のスコープにバインドできます。

useキーワードを使用して、変数を関数のスコープにバインドします-

<?php
$message = 'hello there';
$example = function () {
   var_dump($message);
};
$example();
$example = function () use ($message) { // Inherit $message
   var_dump($message);
};
$example();
// Inherited variable's value is from when the function is defined, not when called
$message = 'Inherited value';
$example();
$message = 'reset to hello'; //message is reset
$example = function () use (&$message) { // Inherit by-reference
   var_dump($message);
};
$example();
// The changed value in the parent scope
// is reflected inside the function call
$message = 'change reflected in parent scope';
$example();
$example("hello message");
?>

出力

これにより、次の出力が生成されます-

NULL string(11) "hello there" string(11) "hello there" string(14) "reset to hello" string(32) "change reflected in parent scope" string(32) "change reflected in parent scope"

元々、「example」関数が最初に呼び出されます。 2回目は、$ messageが継承され、関数が定義されたときにその値が変更されます。 $ messageの値はリセットされ、再び継承されます。ルート/親スコープで値が変更されたため、関数が呼び出されたときに変更が反映されます。


  1. PHPで匿名オブジェクトを作成する

    PHPバージョン7から、匿名クラスの作成が可能になりました。 PHPのすべてのオブジェクトは、クラスに関連付けられています。匿名クラスをインスタンス化してオブジェクトを作成できます。 例 <?php    class my_sample_class {}    $obj = new class extends my_sample_class {};    echo "Does the instance belong to parent class? = " ;    echo var_du

  2. PHPのextract()関数

    extract()関数は、変数を配列から現​​在のシンボルテーブルにインポートします。正常に抽出された変数の数を返します。 構文 extract(arr, rules, prefix) パラメータ 到着 −指定された配列 ルール −無効な変数名の処理方法を指定します。可能な値は次のとおりです- EXTR_OVERWRITE −デフォルト。衝突すると、既存の変数が上書きされます EXTR_SKIP −衝突時に、既存の変数は上書きされません EXTR_PREFIX_SAME −衝突時に、変数名にプレフィックスが付けられます EXTR_PREFIX_