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