PHP7之Closure::call javascriptクロージャー クロージャが必要 google closur

WBOY
リリース: 2016-07-29 08:52:16
オリジナル
1487 人が閲覧しました

Closure クラス: 匿名関数 (PHP 5.3 で導入) は、このタイプのオブジェクトを生成します。
このクラスはクラスまたはオブジェクトにバインドできます。つまり、カスタム メソッドがクラスまたはオブジェクトに動的に追加されます

php7 より前に使用されたメソッド

  • Closure::bind: クロージャーをコピーし、指定された $this オブジェクトをバインドしますそしてクラススコープ。このメソッドは Closure::bindTo() の静的バージョンです

  • Closure::bindTo: 現在のクロージャ オブジェクトをコピーし、指定された $this オブジェクトとクラス スコープをバインドします。匿名関数を作成して返します。この関数は、現在のオブジェクトと同じ関数本体を持ち、同じ変数をバインドしますが、異なるオブジェクトまたは新しいクラス スコープをバインドできます。

php7 が追加されました

  • Closure::call(): メソッドを囲み、そのメソッドを簡単に呼び出すために、一時的にバインドされたオブジェクト スコープとしてメソッドが追加されました。そのパフォーマンスは、PHP5.6のbindToよりもはるかに高速です。
<code><span>//bind.php</span><span><?php</span><span>/**
 * Created by PhpStorm.
 * User: bee
 * Date: 2016/4/24
 * Time: 22:35
 */</span><span><span>class</span><span>A</span> {</span><span>private</span><span>static</span><span>$sta</span> = <span>1</span>;
    <span>private</span><span>$com</span> = <span>2</span>;
}
<span>$cl1</span> = <span>static</span><span><span>function</span><span>()</span> {</span><span>return</span> A::<span>$sta</span>;
};
<span>$cl2</span> = <span><span>function</span><span>()</span> {</span><span>return</span><span>$this</span>->com;
};

<span>$bcl1</span> = Closure::bind(<span>$cl1</span>, <span>null</span>, <span>'A'</span>);
<span>$bcl2</span> = Closure::bind(<span>$cl2</span>, <span>new</span> A(), <span>'A'</span>);
<span>echo</span><span>$bcl1</span>(), <span>"\n"</span>;
<span>echo</span><span>$bcl2</span>(), <span>"\n"</span>;</span></code>
ログイン後にコピー
<code><span><?php</span><span>//bindTo.php</span><span>/**
 * Created by PhpStorm.
 * User: bee
 * Date: 2016/4/24
 * Time: 22:35
 */</span><span><span>class</span><span>A</span> {</span><span><span>function</span><span>__construct</span><span>(<span>$val</span>)</span> {</span><span>$this</span>->val = <span>$val</span>;
    }
    <span><span>function</span><span>getClosure</span><span>()</span> {</span><span>//returns closure bound to this object and scope</span><span>return</span><span><span>function</span><span>()</span> {</span><span>return</span><span>$this</span>->val; };
    }
}

<span>$ob1</span> = <span>new</span> A(<span>1</span>);
<span>$ob2</span> = <span>new</span> A(<span>2</span>);

<span>$cl</span> = <span>$ob1</span>->getClosure();
<span>echo</span><span>$cl</span>(), <span>"\n"</span>;

<span>$add</span> = <span><span>function</span><span>()</span>{</span><span>return</span><span>$this</span>->val+<span>1</span>;
};
<span>$cl</span> = <span>$add</span>->bindTo(<span>$ob2</span>);
<span>//与call相比,需要增加()方可被调用</span><span>echo</span><span>$cl</span>(), <span>"\n"</span>;</span></code>
ログイン後にコピー
rree').addClass('事前番号付け').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上、クロージャとphp7を含めたPHP7のClosure::callについて紹介しました。PHPチュートリアルに興味のある友人の参考になれば幸いです。

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