Heim > Backend-Entwicklung > PHP-Tutorial > PHP-objektorientierte Schlüsselpunkte [übersetzt]

PHP-objektorientierte Schlüsselpunkte [übersetzt]

WBOY
Freigeben: 2016-07-30 13:31:21
Original
824 Leute haben es durchsucht

  • __construct
<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
  • parent

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
  • self
    Die Präfixänderung zum Aufrufen statischer Mitglieder und statischer Methoden der Klasse innerhalb einer Klasse, und zwar für nicht statische Mitgliedsvariablen und Funktionen.
<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>
Nach dem Login kopieren
  • statisch
    Das hier eingeführte Schlüsselwort static wird hauptsächlich für die neue verzögerte statische Bindungsfunktion von PHP 5.3 und höher verwendet.
<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
  • __destruct
    Die Rolle der Destruktormethode ist genau das Gegenteil der Konstruktionsmethode __construct. Sie wird nur automatisch aufgerufen, bevor das Objekt vom Garbage Collector gesammelt wird. Wir können diese Methode verwenden, um einige notwendige Aufräumarbeiten durchzuführen.
<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
  • __clone
    In Versionen nach PHP 5 ist die Zuweisung zwischen Objekten eine Referenzzuweisung, das heißt, die beiden Objekte verweisen nach der Zuweisung auf denselben Adressraum. Wenn Sie Werte basierend auf Objekten zuweisen möchten, können Sie die von PHP bereitgestellte Klonmethode verwenden . Diese Methode gibt nach einer flachen Kopie eine Kopie des aktuellen Objekts zurück. Wenn Sie während des Klonvorgangs einige spezielle Vorgänge ausführen möchten, z. B. eine tiefe Kopie, müssen Sie die Methode __clone in der Deklaration der aktuellen Klasse implementieren wird implizit aufgerufen. Darüber hinaus sollte besonders darauf geachtet werden, dass die __clone-Methode auf dem Objekt ausgeführt wird, das kopiert wird, dh auf dem Objekt nach der Zuweisung.
<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
  • const
    PHP5可以在类中定义常量属性。和全局常量一样,一旦定义就不能改变。常量属性不需要像普通属性那样以访

    以上就介绍了php面向对象要点[转],包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage