Heim  >  Artikel  >  Backend-Entwicklung  >  Objektorientiert in PHP

Objektorientiert in PHP

WBOY
WBOYOriginal
2016-07-30 13:30:021070Durchsuche

Zugriffskontrolle (Sichtbarkeit)

Die Zugriffskontrolle von PHP umfasst öffentliche, geschützte und private

Auf Klassen, die als öffentliche Mitglieder definiert sind, kann überall zugegriffen werden.
Auf ein als geschützt definiertes Klassenmitglied kann von ihm selbst und seinen Unterklassen und übergeordneten Klassen zugegriffen werden.
Als privat definierte Klassenmitglieder können nur von der Klasse aufgerufen werden, in der sie definiert sind.

kann nicht zum Ändern verwendet werden. class

Klassenattribute können nicht weggelassen werden und müssen als öffentlich, geschützt oder privat definiert werden. Wenn diese Schlüsselwörter nicht für Methoden in der Klasse

festgelegt sind, ist die Methode standardmäßig öffentlich.

Objekte derselben Klasse können auf die privaten und geschützten Mitglieder des anderen zugreifen, auch wenn sie nicht dieselbe Instanz sind. Dies liegt daran, dass die internen Implementierungsdetails dieser Objekte bekannt sind.


Attribute

Verwendung -> (Objektoperator): $this->property (wobei property der Name der Eigenschaft ist). -statische Eigenschaften. Auf statische Eigenschaften wird mit :: (Doppelpunkt) zugegriffen: self::$property

$this ist ein Verweis auf das aufrufende Objekt


Klassenkonstanten

kann Werte, die in der Klasse immer unverändert bleiben, als Konstanten definieren. Beim Definieren und Verwenden von Konstanten muss das $-Symbol nicht verwendet werden

Der Wert einer Konstante muss ein fester Wert sein, keine Variable, kein Klassenattribut, das Ergebnis einer mathematischen Operation oder eines Funktionsaufrufs

Verwenden Sie doppelte Doppelpunkte ::Access

<code>const constant = 'constant value';
</code>

Klassen automatisch laden

Viele Entwickler erstellen beim Schreiben objektorientierter Anwendungen eine PHP-Quelldatei für jede Klassendefinition. Ein großes Ärgernis ist, dass am Anfang jedes Skripts eine lange Liste von Include-Dateien (eine Datei pro Klasse) geschrieben werden muss.

In PHP 5 ist dies nicht mehr notwendig. Es ist möglich, eine spl_autoload_register()-Funktion zu definieren, die automatisch aufgerufen wird, wenn versucht wird, eine Klasse zu verwenden, die noch nicht definiert wurde. Durch den Aufruf dieser Funktion hat die Skript-Engine eine letzte Chance, die erforderlichen Klassen zu laden, bevor PHP mit einem Fehler abstürzt.

<code><?php

// function __autoload($class) {
//     include 'classes/' . $class . '.class.php';
// }

function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

// 或者,自 PHP 5.3.0 起可以使用一个匿名函数
spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});

?>
</code>

Konstruktoren und Destruktoren

Konstruktoren und Destruktoren werden von der Engine nicht implizit aufgerufen. Um den Konstruktor und Destruktor der übergeordneten Klasse auszuführen, müssen Sie explizit parent::__construct(); parent::__destruct()


inherited

Erben mit dem Schlüsselwort

extends


Bereichsauflösungsoperator (::)

Bereichsauflösungsoperator (auch bekannt als Paamayim Nekudotayim ) oder mehr einfach ein Doppelpunktpaar, mit dem auf statische Mitglieder und Klassenkonstanten zugegriffen werden kann


Statisches (statisches) Schlüsselwort

deklariert ein Klassenattribut oder eine Klassenmethode als statisch, einfach Kann sein direkt zugegriffen werden, ohne die Klasse zu instanziieren. Auf statische Eigenschaften kann nicht über ein Objekt einer instanziierten Klasse zugegriffen werden (statische Methoden jedoch schon).

Statische Eigenschaften und Methoden sind standardmäßig öffentlich


Abstrakte Klasse

Verwenden Sie Schlüsselwörter

abstract

für jede Klasse, wenn sie mindestens enthält Wenn eine Methode abstrakt deklariert ist, muss die Klasse auch abstrakt deklariert werden.

Eine als abstrakt definierte Methode deklariert nur ihre aufrufende Methode (Parameter) und kann nicht ihre spezifische Funktionsimplementierung definieren.

Beim Erben einer abstrakten Klasse muss die Unterklasse alle abstrakten Methoden in der übergeordneten Klasse definieren. Außerdem muss die Zugriffskontrolle dieser Methoden mit der in der übergeordneten Klasse identisch sein (oder entspannter)


Schnittstelle

Die Schnittstelle wird durch das Schlüsselwort interface definiert

Alle in der Schnittstelle definierten Methoden müssen öffentlich sein, was ein Merkmal der Schnittstelle ist

Konstanten können auch in der Schnittstelle definiert werden. Die Verwendung von Schnittstellenkonstanten und Klassenkonstanten ist genau gleich, sie können jedoch nicht von Unterklassen oder Unterschnittstellen überschrieben werden.

Um eine Schnittstelle zu implementieren, verwenden Sie den Implements-Operator. Die Klasse muss alle in der Schnittstelle definierten Methoden implementieren, andernfalls wird ein schwerwiegender Fehler gemeldet. Eine Klasse kann mehrere Schnittstellen implementieren. Verwenden Sie Kommas, um die Namen mehrerer Schnittstellen zu trennen.

Schnittstellen können auch von Schnittstellen erben


Traits

Seit PHP 5.4.0 implementiert PHP eine Methode zur Code-Wiederverwendung namens Traits.

<code><?php
trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
</code>
Mehrere Merkmale in der Verwendungsanweisung durch Kommas getrennt auflisten

<code><?php
trait Hello {
    public function sayHello() {
        echo 'Hello ';
    }
}

trait World {
    public function sayWorld() {
        echo 'World';
    }
}

class MyHelloWorld {
    use Hello, World;
    public function sayExclamationMark() {
        echo '!';
    }
}
?>
</code>

Magische Methoden

__construct()

__destruct()
__call()
__callStatic()
__get()
__set()
__isset()
__unset()
Die Funktion __sleep() serialize() prüft, ob eine magische Methode __sleep() in der Klasse vorhanden ist. Falls vorhanden, wird diese Methode zuerst aufgerufen und dann der Serialisierungsvorgang ausgeführt.
__wakeup() unserialize() prüft, ob es eine __wakeup()-Methode gibt. Wenn sie vorhanden ist, wird zuerst die __wakeup-Methode aufgerufen
__toString() wird verwendet, um zu beschreiben, wie eine Klasse reagieren soll, wenn sie als String
behandelt wird __invoke() Beim Versuch, ein Objekt durch Aufrufen einer Funktion aufzurufen, wird die Methode __invoke() automatisch
aufgerufen __set_state() Diese statische Methode wird aufgerufen, wenn var_export() aufgerufen wird, um die Klasse
zu exportieren __clone()
__debugInfo() var_dump() wird aufgerufen, wenn ein Objekt verwendet wird

Diese Funktionen werden in PHP „Magic-Methoden“ genannt. Sie können diese Methodennamen nicht verwenden, wenn Sie Ihre eigenen Klassenmethoden benennen, es sei denn, Sie möchten deren magische Funktionalität nutzen.

Wenn einer unzugänglichen Eigenschaft ein Wert zugewiesen wird, wird __set() aufgerufen.

Beim Lesen des Werts einer unzugänglichen Eigenschaft wird __get() aufgerufen.

__isset() wird aufgerufen, wenn isset() oder empty() für eine unzugängliche Eigenschaft aufgerufen wird.

Wenn unset() für eine unzugängliche Eigenschaft aufgerufen wird, wird __unset() aufgerufen.

Wenn eine unzugängliche Methode in einem Objekt aufgerufen wird, wird __call() aufgerufen.

Beim Aufrufen einer unzugänglichen Methode im statischen Modus wird __callStatic() aufgerufen.


Finales Schlüsselwort

Wenn eine Methode in der übergeordneten Klasse als final deklariert wird, kann die Unterklasse die Methode nicht überschreiben. Wenn eine Klasse als final deklariert ist, kann sie nicht vererbt werden.

Eigenschaften können nicht als final definiert werden, nur Klassen und Methoden können als final definiert werden


Objektkopieren

Objektkopieren kann über das Schlüsselwort clone erfolgen (falls Möglicherweise wird dadurch die __clone()-Methode des Objekts aufgerufen. Die Methode __clone() in einem Objekt kann nicht direkt aufgerufen werden.


Objektvergleich

Bei Verwendung des Vergleichsoperators (==) zum Vergleichen zweier Objektvariablen lautet das Vergleichsprinzip: Wenn die Attribute und Attributwerte der beiden Objekte sind gleich, und wenn die beiden Objekte Instanzen derselben Klasse sind, dann sind die beiden Objektvariablen gleich.

Wenn Sie den Gleichheitsoperator (===) verwenden, müssen diese beiden Objektvariablen auf dieselbe Instanz einer bestimmten Klasse (d. h. dasselbe Objekt) verweisen.


Typeinschränkungen

PHP 5 kann Typeinschränkungen verwenden. Funktionsparameter können als Objekte (geben Sie den Klassennamen im Funktionsprototyp an), Schnittstellen, Arrays (ab PHP 5.1) oder aufrufbar (ab PHP 5.4) angegeben werden. Wenn Sie jedoch NULL als Standardwert des Parameters verwenden, können Sie beim Aufruf der Funktion weiterhin NULL als tatsächlichen Parameter verwenden.

Typeinschränkungen können nicht für Skalartypen wie int oder string verwendet werden. Auch Eigenschaften sind nicht erlaubt.

Typbeschränkungen werden nicht nur in Klassenmitgliedsfunktionen verwendet, sondern auch in Funktionen


Objektserialisierung

Alle Werte in PHP können verwendet werden Die Funktion serialisieren () gibt eine Zeichenfolge zurück, die einen darzustellenden Bytestrom enthält. Die Funktion unserialize() kann den String wieder auf den ursprünglichen Wert von PHP zurücksetzen. Durch die Serialisierung eines Objekts werden alle Variablen des Objekts gespeichert, nicht jedoch die Methoden des Objekts.


Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.

Das Obige hat objektorientiert in PHP eingeführt, einschließlich einiger Aspekte davon. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Stellungnahme:
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