<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>
は、サブクラスの親クラスのメソッドを直接呼び出すために使用されます。
<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>
static キーワードはインスタンス化にのみ使用できるわけではありません。 self やparent と同様に、static は、非静的コンテキストからであっても、静的メソッド呼び出しの識別子として使用できます。このシナリオでは、self は現在のメソッドが配置されているクラスを表します。次のコードを参照してください:
<code>Stephens-Air:Desktop$ php Test.php This <span>is</span> SubA<span>::printSelf.</span> This <span>is</span> SubB<span>::printSelf.</span></code>
実行結果は次のとおりです:
<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教程有兴趣的朋友有所帮助。