lambda、
私自身の理解では、lambda はメソッドを呼び出すためにメソッド名を変数に保存します。一般的な create_function は lambda メソッドを返します。
1 $newfunc = create_function('$a', 'echo "what u put in is " . $a;');2 $newfunc('aaaaa');
ラムダ メソッドの名前を自分で書いて、この形式で呼び出す方が簡単です。
1 function dump($a){2 var_dump($a);3 }4 $a = 'dump';5 $a('321');
クロージャ、
次のコードを文法的に考えてみましょう:
1 class ClosureTest{ 2 public $multiplier; 3 public function __construct($multilier){ 4 $this->multiplier= $multilier; 5 } 6 7 public function getClosure(){ 8 $self = $this; 9 return function($number) use($self) {10 return $number * $self->multiplier;11 };12 }13 }14 15 $test = new ClosureTest(10);16 $x = $test->getClosure();17 echo $x(8);18 $test->multiplier= 11;19 echo $x(8);
最終結果は 8088 です。
必ず使用してください。 に値を渡します。それ以外の場合は、呼び出し時に変数が定義されていないことを通知するメッセージが表示されます。
クロージャは $this ポインタを直接渡すことができないため、$this は最初に $self に保存されます。
コードに反映されていない点がもう 1 つあります。 use を通じてクロージャに渡されるクラス メンバーは参照によって渡される必要があります。そうしないと、後でメンバーの値が変更された後にパッケージ内の値が変更されません。