Heim > Artikel > Backend-Entwicklung > Objektorientiert in PHP
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
abstract
<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>
__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.