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

PHP-objektorientierte Schlüsselpunkte [übersetzt]

Jul 30, 2016 pm 01:31 PM
clone print this

  • __construct
<code><span><span>&lt;?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>-&gt;arg1 = <span>$arg1</span>;
        <span>$this</span>-&gt;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>-&gt;arg1.<span>' $arg2 = '</span>.<span>$this</span>-&gt;arg2.<span>"\n"</span>;
    }
}
<span>$testObject</span> = <span>new</span> ConstructTest(<span>"arg1"</span>,<span>"arg2"</span>); 
<span>$testObject</span>-&gt;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>&lt;?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>-&gt;arg1 = <span>$arg1</span>;
        <span>$this</span>-&gt;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>-&gt;arg1.<span>' $arg2 = '</span>.<span>$this</span>-&gt;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>-&gt;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>-&gt;arg3;
    }
}
<span>$testObject</span> = <span>new</span> SubClass(<span>"arg1"</span>,<span>"arg2"</span>,<span>"arg3"</span>); 
<span>print</span><span>$testObject</span>-&gt;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>&lt;?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>&lt;?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()-&gt;printSelf();
SubB::getInstance()-&gt;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>&lt;?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>-&gt;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>-&gt;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()-&gt;printGroup();
SubB::getInstance()-&gt;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>&lt;?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>&lt;?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>-&gt;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>-&gt;innerClass = <span>new</span> InnerClass();
    }
    <span>public</span><span><span>function</span><span>__clone</span><span>()</span> {</span><span>$this</span>-&gt;innerClass = <span>clone</span><span>$this</span>-&gt;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>-&gt;innerClass-&gt;id = <span>20</span>;
<span>print</span><span>"In outerA: "</span>;
<span>$outerA</span>-&gt;innerClass-&gt;printSelf();
<span>print</span><span>"In outerB: "</span>;
<span>$outerB</span>-&gt;innerClass-&gt;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教程有兴趣的朋友有所帮助。

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie diese Methode in Java So verwenden Sie diese Methode in Java Apr 18, 2023 pm 01:58 PM

So verwenden Sie diese Methode in Java

Ein Artikel, der diesen Punkt versteht und 70 % der Front-End-Leute erreicht Ein Artikel, der diesen Punkt versteht und 70 % der Front-End-Leute erreicht Sep 06, 2022 pm 05:03 PM

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

Einführung in Python-Funktionen: Funktionen und Anwendungsbeispiele der Druckfunktion Einführung in Python-Funktionen: Funktionen und Anwendungsbeispiele der Druckfunktion Nov 03, 2023 pm 04:33 PM

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

Wo ist der Aufdruck auf der Tastatur? Wo ist der Aufdruck auf der Tastatur? Jun 19, 2023 am 09:37 AM

Wo ist der Aufdruck auf der Tastatur?

Detaillierte Erklärung hierzu in der JavaScript-Pfeilfunktion Detaillierte Erklärung hierzu in der JavaScript-Pfeilfunktion Jan 25, 2024 pm 01:41 PM

Detaillierte Erklärung hierzu in der JavaScript-Pfeilfunktion

Wie ändert JavaScript diesen Zeiger? Kurze Analyse von drei Methoden Wie ändert JavaScript diesen Zeiger? Kurze Analyse von drei Methoden Sep 19, 2022 am 09:57 AM

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

Verwenden der Druckfunktion in Python Verwenden der Druckfunktion in Python Feb 18, 2024 pm 02:48 PM

Verwenden der Druckfunktion in Python

Methoden zum Initialisieren dieser Referenz und Objektkonstruktion in Java Methoden zum Initialisieren dieser Referenz und Objektkonstruktion in Java May 14, 2023 pm 06:40 PM

Methoden zum Initialisieren dieser Referenz und Objektkonstruktion in Java

See all articles