匿名クラスは、匿名関数と同様に、1回限りの単純なオブジェクトを作成します
<code><span><span><span><?php</span> /** * Created by PhpStorm. * User: bee * Date: 2016/4/24 * Time: 00:17 */</span><span>echo</span><span>'匿名函数'</span>; <span>$anonymous_func</span> = <span><span>function</span><span>()</span>{</span><span>return</span><span>'function'</span>;}; <span>echo</span><span>$anonymous_func</span>(); <span>echo</span><span>'<br>'</span>; <span>echo</span><span>'<hr>'</span>; <span><span>class</span><span>common</span> {</span><span>public</span><span>$default</span> = <span>10</span>; <span><span>function</span><span>__construct</span><span>(<span>$key</span>)</span>{</span><span>$this</span>->getVal(<span>$key</span>); } <span>public</span><span><span>function</span><span>getVal</span><span>(int <span>$i</span>)</span>:<span>int</span>{</span><span>$this</span>-><span>default</span> += <span>$i</span>; <span>return</span><span>$this</span>-><span>default</span>+<span>0.1</span>; } } <span>echo</span><span>'有名函数'</span>;<span>echo</span><span>'<br>'</span>; <span>$com</span> = <span>new</span> common(<span>1</span>); <span>echo</span><span>$com</span>->getVal(<span>2.2</span>).<span>'--'</span>; <span>echo</span><span>$com</span>->getVal(<span>2.2</span>).<span>'--'</span>; <span>echo</span> (<span>new</span> common(<span>1</span>))->getVal(<span>8.9</span>); <span>echo</span><span>'<hr>'</span>;<span>echo</span><span>'匿名类'</span>; <span>//定义匿名类需继承</span><span>echo</span> (<span>new</span><span><span>class</span>(1) <span>extends</span><span>common</span>{</span>})->getVal(<span>90</span>);<span>echo</span><span>'<br>'</span>; <span>echo</span> (<span>new</span><span><span>class</span>(2) <span>extends</span><span>common</span>{</span>})->getVal(<span>90</span>);</span></span></code>
匿名クラスが通常のクラスにネストされた後は、外部クラス(Outer class)にアクセスできません
private (プライベート)、protected (保護された) メソッドまたはプロパティ。 外部クラス(Outer class)にアクセスするには protected
匿名クラスがこの外部クラスを拡張できるプロパティまたはメソッド。 アウタークラス(Outer class)のプライベートを利用するには
属性はコンストラクターを通じて渡す必要があります:
<code><?php <span><span>class</span><span>Outer</span> {</span><span>private</span> $prop = <span>1</span>; <span>protected</span> $prop2 = <span>2</span>; <span>protected</span> function func1() { <span>return</span><span>3</span>; } <span>public</span> function func2() { <span>return</span><span>new</span><span><span>class</span>($<span>this</span>-><span>prop</span>) <span><span>extends</span></span><span>Outer</span> {<span>private</span> $prop3; <span>public</span> function __construct($prop) { $<span>this</span>->prop3 = $prop; } <span>public</span> function func3() { <span>return</span> $<span>this</span>->prop2 + $<span>this</span>->prop3 + $<span>this</span>->func1(); } }; } } echo (<span>new</span> Outer)->func2()->func3();<span>//6</span></code>
匿名関数はクロージャを実装でき、対応する匿名クラスもクロージャを実装できます
<code><span><?php</span><span>/** * Created by PhpStorm. * User: bee * Date: 2016/4/24 * Time: 1:51 */</span><span>$arr</span> = <span>array</span>(); <span>for</span> (<span>$i</span>=<span>0</span>; <span>$i</span><<span>3</span>; <span>$i</span>++){ <span>$arr</span>[] = <span>new</span><span><span>class</span>{</span><span>public</span><span>$index</span>=<span>0</span>; <span><span>function</span><span>__construct</span><span>()</span> {</span><span>echo</span><span>'create</br>'</span>; } <span>public</span><span><span>function</span><span>getVal</span><span>(<span>$index</span>)</span>{</span><span>$this</span>->index = <span>$index</span>; <span>echo</span><span>$this</span>->index; } <span>public</span><span><span>function</span><span>getIndex</span><span>()</span>{</span><span>echo</span><span>$this</span>->index; } }; } <span>$arr</span>[<span>2</span>]->getVal(<span>2</span>); <span>echo</span><span>'<br>'</span>; var_dump(<span>$arr</span>[<span>1</span>]); <span>$arr</span>[<span>1</span>]->getIndex(); </code>
以上、php7 の内容も含めて PHP7 の匿名クラスを紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。