<code><span><span><?php</span><span><span>class</span><span>ConstructTest</span> {</span><span>private</span><span>$arg1</span>; <span>private</span><span>$arg2</span>; <span>public</span><span><span>function</span><span>__construct</span><span>(<span>$arg1</span>, <span>$arg2</span>)</span> {</span><span>$this</span>->arg1 = <span>$arg1</span>; <span>$this</span>->arg2 = <span>$arg2</span>; <span>print</span><span>"__construct is called...\n"</span>; } <span>public</span><span><span>function</span><span>printAttributes</span><span>()</span> {</span><span>print</span><span>'$arg1 = '</span>.<span>$this</span>->arg1.<span>' $arg2 = '</span>.<span>$this</span>->arg2.<span>"\n"</span>; } } <span>$testObject</span> = <span>new</span> ConstructTest(<span>"arg1"</span>,<span>"arg2"</span>); <span>$testObject</span>->printAttributes();</span></span></code>
運行結果如下:
<code><span>Stephens</span>-<span>Air</span><span>:Desktop</span><span>$ </span>php <span>Test</span>.php __construct is called... <span>$arg1</span> = arg1 <span>$arg2</span> = arg2</code>
用於在子類中直接調用父類
在類別內呼叫該類別靜態成員和靜態方法的前綴修飾,對於非靜態成員變數和函數則使用this。<code><span><span><?php</span><span><span>class</span><span>BaseClass</span> {</span><span>protected</span><span>$arg1</span>; <span>protected</span><span>$arg2</span>; <span><span>function</span><span>__construct</span><span>(<span>$arg1</span>, <span>$arg2</span>)</span> {</span><span>$this</span>->arg1 = <span>$arg1</span>; <span>$this</span>->arg2 = <span>$arg2</span>; <span>print</span><span>"__construct is called...\n"</span>; } <span><span>function</span><span>getAttributes</span><span>()</span> {</span><span>return</span><span>'$arg1 = '</span>.<span>$this</span>->arg1.<span>' $arg2 = '</span>.<span>$this</span>->arg2; } } <span><span>class</span><span>SubClass</span><span>extends</span><span>BaseClass</span> {</span><span>protected</span><span>$arg3</span>; <span><span>function</span><span>__construct</span><span>(<span>$baseArg1</span>, <span>$baseArg2</span>, <span>$subArg3</span>)</span> {</span><span>parent</span>::__construct(<span>$baseArg1</span>, <span>$baseArg2</span>); <span>$this</span>->arg3 = <span>$subArg3</span>; } <span><span>function</span><span>getAttributes</span><span>()</span> {</span><span>return</span><span>parent</span>::getAttributes().<span>' $arg3 = '</span>.<span>$this</span>->arg3; } } <span>$testObject</span> = <span>new</span> SubClass(<span>"arg1"</span>,<span>"arg2"</span>,<span>"arg3"</span>); <span>print</span><span>$testObject</span>->getAttributes().<span>"\n"</span>;</span></span></code>
<code><span>Stephens</span>-<span>Air</span><span>:Desktop</span><span>$ </span>php <span>Test</span>.php __construct is called... <span>$arg1</span> = arg1 <span>$arg2</span> = arg2 <span>$arg3</span> = arg3</code>
<code><span><span><?php</span><span><span>class</span><span>StaticExample</span> {</span><span>static</span><span>public</span><span>$arg1</span> = <span>"Hello, This is static field.\n"</span>; <span>static</span><span>public</span><span><span>function</span><span>sayHello</span><span>()</span> {</span><span>print</span><span>self</span>::<span>$arg1</span>; } } <span>print</span> StaticExample::<span>$arg1</span>; StaticExample::sayHello();</span></code>
<code><span><span><?php</span><span>abstract</span><span><span>class</span><span>Base</span> {</span><span>public</span><span>static</span><span><span>function</span><span>getInstance</span><span>()</span> {</span><span>//这里的new static()实例化的是调用该静态方法的当前类。</span><span>return</span><span>new</span><span>static</span>(); } <span>abstract</span><span>public</span><span><span>function</span><span>printSelf</span><span>()</span>;</span>} <span><span>class</span><span>SubA</span><span>extends</span><span>Base</span> {</span><span>public</span><span><span>function</span><span>printSelf</span><span>()</span> {</span><span>print</span><span>"This is SubA::printSelf.\n"</span>; } } <span><span>class</span><span>SubB</span><span>extends</span><span>Base</span> {</span><span>public</span><span><span>function</span><span>printSelf</span><span>()</span> {</span><span>print</span><span>"This is SubB::printSelf.\n"</span>; } } SubA::getInstance()->printSelf(); SubB::getInstance()->printSelf();</span></span></code>運作結果如下:
<code>Stephens-Air:Desktop$ php Test.php This <span>is</span> SubA<span>::printSelf.</span> This <span>is</span> SubB<span>::printSelf.</span></code>
__destruct
析構方法的作用和建構方法__construct剛好相反,它只是在物件被垃圾收集器收集之前自動調用,我們可以利用該方法做一些必要的清理工作。<code><span><span><?php</span><span>abstract</span><span><span>class</span><span>Base</span> {</span><span>private</span><span>$ownedGroup</span>; <span>public</span><span><span>function</span><span>__construct</span><span>()</span> {</span><span>//这里的static和上面的例子一样,表示当前调用该方法的实际类。</span><span>//需要另外说明的是,这里的getGroup方法即便不是静态方法,也会得到相同的结果。然而倘若</span><span>//getGroup真的只是普通类方法,那么这里还是建议使用$this。</span><span>$this</span>->ownedGroup = <span>static</span>::getGroup(); } <span>public</span><span><span>function</span><span>printGroup</span><span>()</span> {</span><span>print</span><span>"My Group is "</span>.<span>$this</span>->ownedGroup.<span>"\n"</span>; } <span>public</span><span>static</span><span><span>function</span><span>getInstance</span><span>()</span> {</span><span>return</span><span>new</span><span>static</span>(); } <span>public</span><span>static</span><span><span>function</span><span>getGroup</span><span>()</span> {</span><span>return</span><span>"default"</span>; } } <span><span>class</span><span>SubA</span><span>extends</span><span>Base</span> {</span> } <span><span>class</span><span>SubB</span><span>extends</span><span>Base</span> {</span><span>public</span><span>static</span><span><span>function</span><span>getGroup</span><span>()</span> {</span><span>return</span><span>"SubB"</span>; } } SubA::getInstance()->printGroup(); SubB::getInstance()->printGroup(); </span></span></code>
<code> Stephens-Air:Desktop$ php Test.php My <span>Group</span><span>is</span><span>default</span> My <span>Group</span><span>is</span> SubB</code>
<code><span><span><?php</span><span><span>class</span><span>TestClass</span> {</span><span><span>function</span><span>__destruct</span><span>()</span> {</span><span>print</span><span>"TestClass destructor is called.\n"</span>; } } <span>$testObj</span> = <span>new</span> TestClass(); <span>unset</span>(<span>$testObj</span>); <span>print</span><span>"Application will exit.\n"</span>;</span></code>
<code> Stephens<span>-Air</span>:Desktop$ php Test<span>.</span>php Before calling <span>to</span> clone<span>.</span> __clone is called<span>.</span> After calling <span>to</span> clone<span>.</span><span>In</span> outerA: <span>$id</span><span>=</span><span>20</span><span>In</span> outerB: <span>$id</span><span>=</span><span>10</span></code>
以上就介绍了php面向对象要点[转],包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。