PHP-objektorientierte Schlüsselpunkte [übersetzt]
Jul 30, 2016 pm 01:31 PM- __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>
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>
- 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>
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>
- 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>
- 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>
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>
- __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>
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>
- __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>
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>
- const
PHP5可以在类中定义常量属性。和全局常量一样,一旦定义就不能改变。常量属性不需要像普通属性那样以开头,按照惯例,只能用大写字母来命名常量。另外和静态属性一样,只能通过类而不能通过类的实例访问常量属性,引用常量时同样也不需要以 以上就介绍了php面向对象要点[转],包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So verwenden Sie diese Methode in Java

Ein Artikel, der diesen Punkt versteht und 70 % der Front-End-Leute erreicht

Einführung in Python-Funktionen: Funktionen und Anwendungsbeispiele der Druckfunktion

Wo ist der Aufdruck auf der Tastatur?

Detaillierte Erklärung hierzu in der JavaScript-Pfeilfunktion

Wie ändert JavaScript diesen Zeiger? Kurze Analyse von drei Methoden

Verwenden der Druckfunktion in Python

Methoden zum Initialisieren dieser Referenz und Objektkonstruktion in Java
