Anonymous classes, like anonymous functions, create one-time simple objects
<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>
After an anonymous class is nested into a normal Class, it cannot access the outer class (Outer class)
private (private), protected (protected) method or property. In order to access the outer class (Outer class) protected
Properties or methods by which an anonymous class can extend this outer class. In order to use the private of outer class (Outer class)
Attributes must be passed in through the constructor:
<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>
Anonymous functions can implement closures, then the corresponding anonymous classes can also implement closures
<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>
The above introduces the anonymous class of PHP7, including the content of php7. I hope it will be helpful to friends who are interested in PHP tutorials.