匿名類別跟匿名函數一樣,創建一次性的簡單物件
<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>
匿名類別被嵌套進普通 Class 後,不能存取這個外部類別(Outer class)的
private(私有)、protected(受保護)方法或屬性。 為了存取外部類別(Outer class)protected
屬性或方法,匿名類別可以 extend(擴充)此外部類別。 為了使用外部類別(Outer class)的 private
屬性,必須透過建構器傳進來:
<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教學有興趣的朋友有幫助。