PHP ラムダとクロージャ

WBOY
リリース: 2016-06-23 14:33:30
オリジナル
1021 人が閲覧しました

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 を通じてクロージャに渡されるクラス メンバーは参照によって渡される必要があります。そうしないと、後でメンバーの値が変更された後にパッケージ内の値が変更されません。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート