<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>
Die laufenden Ergebnisse sind wie folgt:
<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>
wird verwendet. Der direkte Aufruf der Methode in der übergeordneten Klasse in der Unterklasse
<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>
ergibt Folgendes:
<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>
Die laufenden Ergebnisse lauten wie folgt:
<code>Stephens-Air:Desktop$ php Test.php This <span>is</span> SubA<span>::printSelf.</span> This <span>is</span> SubB<span>::printSelf.</span></code>
Das Schlüsselwort static kann nicht nur zur Instanziierung verwendet werden. Wie self und parent kann auch static als Bezeichner für statische Methodenaufrufe verwendet werden, auch aus nicht statischen Kontexten. In diesem Szenario stellt self immer noch die Klasse dar, in der sich die aktuelle Methode befindet. Siehe den folgenden 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>
Das laufende Ergebnis lautet wie folgt:
<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>
Die laufenden Ergebnisse sind wie folgt:
<code> Stephens-Air:Desktop$ php Test.php TestClass <span><span>destructor</span><span>is</span><span>called</span>. <span>Application</span><span>will</span><span>exit</span>.</span></code>
<code><span><span><?php</span><span><span>class</span><span>InnerClass</span> {</span><span>public</span><span>$id</span> = <span>10</span>; <span>public</span><span><span>function</span><span>printSelf</span><span>()</span> {</span><span>print</span><span>'$id = '</span>.<span>$this</span>->id.<span>"\n"</span>; } } <span><span>class</span><span>OuterClass</span> {</span><span>public</span><span>$innerClass</span>; <span>public</span><span><span>function</span><span>__construct</span><span>()</span> {</span><span>$this</span>->innerClass = <span>new</span> InnerClass(); } <span>public</span><span><span>function</span><span>__clone</span><span>()</span> {</span><span>$this</span>->innerClass = <span>clone</span><span>$this</span>->innerClass; <span>print</span><span>"__clone is called.\n"</span>; } } <span>$outerA</span> = <span>new</span> OuterClass(); <span>print</span><span>"Before calling to clone.\n"</span>; <span>$outerB</span> = <span>clone</span><span>$outerA</span>; <span>print</span><span>"After calling to clone.\n"</span>; <span>$outerA</span>->innerClass->id = <span>20</span>; <span>print</span><span>"In outerA: "</span>; <span>$outerA</span>->innerClass->printSelf(); <span>print</span><span>"In outerB: "</span>; <span>$outerB</span>->innerClass->printSelf();</span></span></code>
Die Laufergebnisse sind wie folgt:
<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教程有兴趣的朋友有所帮助。