PHP OOP Part-Static-Eigenschaft, Methode und this vs. self
Jan 04, 2025 pm 04:36 PMIn dieser Serie werde ich die Grundlagen der objektorientierten PHP-Programmierung (OOP) behandeln. Der Inhalt wird in aufeinanderfolgende Teile gegliedert, die sich jeweils auf ein bestimmtes Thema konzentrieren. Wenn Sie ein Anf?nger sind oder mit OOP-Konzepten nicht vertraut sind, soll diese Serie Sie Schritt für Schritt anleiten. In diesem Teil werde ich über die statische Eigenschaft, die Methode und this vs. self in PHP diskutieren. Beginnen wir gemeinsam die Reise zum Erlernen von PHP OOP!
Was ist Eigenschaft und Methode?
Lassen Sie uns zun?chst versuchen, Eigenschaften und Methoden zu verstehen. Wenn wir mit einer Klasse mehrere Objekte erstellen, wird jedem Objekt ein separater Speicherort zugewiesen. Dadurch werden alle Eigenschaften und Methoden dieses Objekts auch diesem bestimmten Speicherort zugewiesen.
Das bedeutet, dass, wenn wir eine Eigenschaft eines Objekts ?ndern, die ?nderung nur auf dieses bestimmte Objekt beschr?nkt ist. Es wirkt sich nicht auf andere Objekte aus, da die Eigenschaften und Methoden einer Klasse mit den jeweiligen Objekten dieser Klasse verknüpft sind.
Um von au?erhalb der Klasse auf diese Eigenschaften oder Methoden zuzugreifen, müssen wir ein Objekt dieser Klasse erstellen. Wenn wir jedoch innerhalb der Klasse auf diese Eigenschaften oder Methoden zugreifen m?chten, k?nnen wir das Schlüsselwort $this verwenden. Das Schlüsselwort $this repr?sentiert das aktuelle Objekt der Klasse. Wir werden sp?ter mehr über das Schlüsselwort $this erfahren. Schauen wir uns das folgende Beispiel an:
Codebeispiel
class Car { public $name; public $color; function __construct(string $name, string $color) { $this->name = $name; $this->color = $color; } public function getValue() { echo "Car name: $this->name\n"; echo "Car color: $this->color\n"; } } $tesla = new Car('Zip', 'Blue'); $tesla->getValue();
In diesem Beispiel k?nnen wir sehen, dass wir für den Zugriff auf die Eigenschaften der Klasse das Schlüsselwort $this innerhalb der Methoden derselben Klasse verwendet haben. Um eine beliebige Methode dieser Klasse von au?en nutzen zu k?nnen, haben wir ebenfalls ein Objekt der Klasse erstellt. Auf diese Weise verwenden wir normalerweise die normalen Eigenschaften oder Methoden einer Klasse.
Was sind statische Eigenschaften und Methoden?
Statische Eigenschaften oder Methoden funktionieren jedoch anders. Wenn wir eine Klasse definieren, wird ihr nur einmal ein Speicherort zugewiesen. Wenn wir statische Eigenschaften oder Methoden in einer Klasse definieren, werden diese ebenfalls einem bestimmten Speicherort neben der Klasse selbst zugewiesen, jedoch nur einmal.
Wenn wir sp?ter eine statische Eigenschaft oder Methode ?ndern, wirkt sich die ?nderung daher auf alle Instanzen der Klasse aus. Mit anderen Worten: Wo auch immer die statische Eigenschaft oder Methode verwendet wird, ist ihr aktualisierter Wert verfügbar.
Wenn wir von au?erhalb der Klasse auf statische Eigenschaften oder Methoden zugreifen m?chten, k?nnen wir den :: (Bereichsaufl?sungsoperator) verwenden, ohne ein Objekt zu erstellen. Alternativ k?nnen wir auch nach dem Anlegen eines Objekts darauf zugreifen. Um innerhalb der Klasse darauf zuzugreifen, k?nnen wir das Schlüsselwort self oder den Klassennamen selbst verwenden. Hier stellt das Schlüsselwort self die Klasse dar.
Wir werden das Schlüsselwort self sp?ter genauer untersuchen. Schauen wir uns das folgende Beispiel an:
Codebeispiel
class Car { public $name; public $color; function __construct(string $name, string $color) { $this->name = $name; $this->color = $color; } public function getValue() { echo "Car name: $this->name\n"; echo "Car color: $this->color\n"; } } $tesla = new Car('Zip', 'Blue'); $tesla->getValue();
In diesem Beispiel k?nnen wir sehen, dass wir für den Zugriff auf die statischen Eigenschaften der Klasse das Schlüsselwort self innerhalb der Methoden derselben Klasse verwendet haben. Um au?erdem eine statische Methode von au?erhalb der Klasse zu verwenden, haben wir ein Objekt der Klasse erstellt. Wir k?nnten jedoch auch direkt darauf zugreifen, indem wir den Klassennamen zusammen mit dem :: (Bereichsaufl?sungsoperator) verwenden, ohne ein Objekt zu erstellen. Auf diese Weise verwenden wir normalerweise die statischen Eigenschaften oder Methoden einer Klasse.
Im obigen Beispiel k?nnen wir sehen, dass wir mit der Car-Klasse zwei Objekte, $toyota und $bmw, mit unterschiedlichen Daten erstellt haben. Nun wollen wir auf die Werte dieser Objekte zugreifen. Wenn wir den obigen Code ausführen, sehen wir die folgende Ausgabe:
Codebeispiel
class Car { public static $name; public static $color; function __construct($name, $color) { self::$name = $name; self::$color = $color; } public static function getValue() { echo "Car name: " . self::$name . "\n"; echo "Car color: " . self::$color . "\n"; } } $toyota = new Car('Toyota', 'Black'); $bmw = new Car('BMW', 'Orange'); $toyota::getValue(); $bmw::getValue(); Car::getValue();
Wir k?nnen sehen, dass beide Objekte die gleichen Werte anzeigen. Mit anderen Worten: Die Werte, die wir erhalten, stammen vom zuletzt erstellten Objekt. Selbst wenn wir versuchen, direkt über die Klasse auf die Werte zuzugreifen, erhalten wir immer noch dieselben Werte, d. h. die Werte des zweiten Objekts.
Der Grund dafür ist ganz klar. Wie bereits erw?hnt, werden statische Eigenschaften oder Methoden an einem einzigen Speicherort erstellt. Wenn die statischen Eigenschaften oder Methoden von irgendwoher ge?ndert werden, wirkt sich die ?nderung auf alle Instanzen der Klasse aus.
Als wir im obigen Beispiel das zweite Objekt erstellten, ?nderten sich die Werte der Eigenschaften, sobald das Objekt erstellt wurde. Diese ?nderung wirkte sich auch auf das zuvor erstellte Objekt aus, da alle Objekte der Klasse dieselben statischen Eigenschaften oder Methoden verwenden.
Es ist wichtig zu bedenken, dass statische Eigenschaften oder Methoden einer Klasse nicht auf die gleiche Weise wie normale Klasseneigenschaften oder -methoden verwendet werden k?nnen. Sie k?nnen nicht mit dem Operator → darauf zugreifen. Stattdessen müssen Sie den ::(Bereichsaufl?sungsoperator) verwenden, unabh?ngig davon, ob Sie von innerhalb oder au?erhalb der Klasse darauf zugreifen.
Schlüsselwort $this vs. self
Was ist $this?
Wir haben bereits die Verwendung der Schlüsselw?rter $this und self gesehen. Lassen Sie uns nun tiefer in diese Konzepte eintauchen, um sie besser zu verstehen.
$this ist ein integriertes PHP-Schlüsselwort. Wenn wir ein oder mehrere Objekte mithilfe einer Klasse erstellen, kann auf die normalen Eigenschaften und Methoden, die in der Klasse definiert sind, mit dem Schlüsselwort $this innerhalb der Klasse zugegriffen werden.
Jetzt wissen wir, dass eine definierte Klasse nur einmal einem bestimmten Speicherort zugewiesen wird. Dies k?nnte die Frage aufwerfen: Wenn wir mehrere Objekte aus dieser Klasse erstellen, greift das Schlüsselwort $this dann nur einmal für alle Objekte auf die Eigenschaften oder Methoden zu?
Die Antwort ist ?Nein“. Dies liegt daran, dass das Schlüsselwort $this, wie wir bereits besprochen haben, nicht die Klasse selbst darstellt, sondern das von dieser Klasse erstellte Objekt. Mit anderen Worten, $this steht in direktem Zusammenhang mit dem Objekt. Infolgedessen greift das Schlüsselwort $this für jedes erstellte Objekt für jedes Objekt separat auf die Eigenschaften und Methoden der Klasse zu. Schauen wir uns das folgende Beispiel an:
class Car { public $name; public $color; function __construct(string $name, string $color) { $this->name = $name; $this->color = $color; } public function getValue() { echo "Car name: $this->name\n"; echo "Car color: $this->color\n"; } } $tesla = new Car('Zip', 'Blue'); $tesla->getValue();
Im vorherigen Beispiel haben wir es mehrmals verwendet, aber die Verwendung von $this wurde nicht im Detail besprochen. Nachdem wir nun ein gewisses Verst?ndnis von $this gewonnen haben, k?nnen wir seine Verwendung besser verstehen. Mit dieser Klasse haben wir Objekte erstellt. Jetzt verstehen wir, dass das Schlüsselwort $this für jedes Objekt separat auf die Eigenschaften zugreift.
Es ist jedoch wichtig zu beachten, dass das Schlüsselwort $this nicht innerhalb einer statischen Methode verwendet werden kann. Warum es nicht verwendet werden kann, wird in Kürze erkl?rt.
Was ist das Schlüsselwort self?
Wir wissen bereits, dass eine Klasse beim Definieren nur einmal einem Speicherort zugewiesen wird. Ebenso werden alle statischen Eigenschaften und Methoden innerhalb dieser Klasse zusammen mit der Klasse nur einmal dem Speicherort zugewiesen.
Wenn wir Objekte mit dieser Klasse erstellen, werden die statischen Eigenschaften oder Methoden daher nicht für jedes Objekt separat erstellt. Aus diesem Grund k?nnen wir mit dem Schlüsselwort $this nicht auf diese statischen Eigenschaften oder Methoden zugreifen. Das Schlüsselwort $this stellt das Objekt der Klasse dar, und da statische Eigenschaften oder Methoden sich nicht auf ein Objekt, sondern direkt auf die Klasse selbst beziehen, kann mit $this nicht auf sie zugegriffen werden.
Um auf statische Eigenschaften oder Methoden innerhalb der Klasse zuzugreifen, verwenden wir das Schlüsselwort self oder den Klassennamen zusammen mit dem ::(Bereichsaufl?sungsoperator). Dies liegt daran, dass das Schlüsselwort self die Klasse selbst darstellt. Schauen wir uns das folgende Beispiel an:
class Car { public static $name; public static $color; function __construct($name, $color) { self::$name = $name; self::$color = $color; } public static function getValue() { echo "Car name: " . self::$name . "\n"; echo "Car color: " . self::$color . "\n"; } } $toyota = new Car('Toyota', 'Black'); $bmw = new Car('BMW', 'Orange'); $toyota::getValue(); $bmw::getValue(); Car::getValue();
In diesem Beispiel sehen wir, dass wir mithilfe des Klassennamens oder des Schlüsselworts self mit dem ::scope-Aufl?sungsoperator problemlos auf statische Mitglieder innerhalb einer nicht statischen Methode zugreifen k?nnen, da sie mit der Klasse verknüpft sind. Um auf sie zuzugreifen, müssen wir daher kein separates Objekt erstellen.
Wenn wir jedoch innerhalb einer statischen Methode auf nicht statische Mitglieder zugreifen m?chten, müssen wir das Schlüsselwort $this verwenden. Wir wissen jedoch, dass das Schlüsselwort $this nicht innerhalb einer statischen Methode verwendet werden kann, da $this mit dem Objekt verknüpft ist, w?hrend nicht-statische Elemente nicht mit dem Objekt verknüpft sind. Aus diesem Grund k?nnen wir das Schlüsselwort $this nicht innerhalb einer statischen Methode verwenden.
Wenn wir jedoch auf nicht statische Mitglieder innerhalb einer statischen Methode zugreifen müssen, k?nnen wir eine Instanz oder ein Objekt der Klasse innerhalb der statischen Methode erstellen und dann das Schlüsselwort $this verwenden, um darauf zuzugreifen, wie im obigen Beispiel gezeigt .
Ich hoffe, dass Ihnen dies ein klareres Verst?ndnis für die Verwendung der Schlüsselw?rter ?$this“ und ?self“ vermittelt. Das ist alles für heute; wir machen in der n?chsten Lektion weiter.
Sie k?nnen sich mit mir auf GitHub und Linkedin verbinden.
Das obige ist der detaillierte Inhalt vonPHP OOP Part-Static-Eigenschaft, Methode und this vs. self. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

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)

H?ufige Probleme und L?sungen für den variablen PHP -Umfang umfassen: 1. Die globale Variable kann innerhalb der Funktion nicht zugegriffen werden, und sie muss bei der Verwendung des globalen Schlüsselworts oder Parameters übergeben werden. 2. Die statische Variable wird statisch deklariert und nur einmal initialisiert und der Wert wird zwischen mehreren Aufrufen beibehalten. 3.. Hyperglobale Variablen wie $ _get und $ _post k?nnen direkt in jedem Bereich verwendet werden, aber Sie müssen auf eine sichere Filterung achten. 4. Die anonymen Funktionen müssen über das Schlüsselwort verwenden, und wenn Sie externe Variablen ?ndern, müssen Sie eine Referenz übergeben. Das Beherrschen dieser Regeln kann dazu beitragen, Fehler zu vermeiden und die Code -Stabilit?t zu verbessern.

Um PHP -Datei -Uploads sicher zu verarbeiten, müssen Sie die Quelle und die Type und die Eingabe des Dateinamens und des Pfades überprüfen, Serverbeschr?nkungen festlegen und Mediendateien zweimal verarbeiten. 1. überprüfen Sie die Upload -Quelle, um CSRF durch Token zu verhindern, und erkennen Sie den realen MIME -Typ über die Finfo_file mithilfe der Whitelist -Steuerung. 2. Benennen Sie die Datei in eine zuf?llige Zeichenfolge um und bestimmen Sie die Erweiterung, um sie gem?? dem Erkennungstyp in einem Verzeichnis ohne Web zu speichern. 3. Die PHP -Konfiguration begrenzt die Hochladengr??e und das tempor?re Verzeichnis Nginx/Apache verbietet den Zugriff auf das Upload -Verzeichnis. 4. Die GD -Bibliothek stellt die Bilder neu, um potenzielle b?swillige Daten zu l?schen.

Es gibt drei g?ngige Methoden für den PHP -Kommentarcode: 1. Verwenden Sie // oder #, um eine Codezeile zu blockieren, und es wird empfohlen, // zu verwenden. 2. Verwenden Sie /.../, um Codebl?cke mit mehreren Zeilen zu wickeln, die nicht verschachtelt werden k?nnen, aber gekreuzt werden k?nnen. 3.. Kombinationskenntnisse Kommentare wie die Verwendung / if () {} / Um Logikbl?cke zu steuern oder um die Effizienz mit Editor -Verknüpfungsschlüssel zu verbessern, sollten Sie auf die Schlie?ung von Symbolen achten und das Verschachteln bei der Verwendung vermeiden.

AgneeratorinphpiSamemory-effizientes WaytoiterateOverlargedatasetsByyieldingValueatimeinsteadofReturningThemallatonce.1.GeneratorsusetheyieldKeywordtoproduktenvaluesonDemand, ReducingMemoryUsage.2.TheyareusefulforfulforfulfordlingBiglopploups, Lesebiglochen, Leselungen, Lesebigs, Leselung, oder

Der Schlüssel zum Schreiben von PHP -Kommentaren liegt in der Kl?rung des Zwecks und der Spezifikationen. Kommentare sollten "Warum" und nicht "was getan" erkl?ren, um Redundanz oder zu Einfachheit zu vermeiden. 1. Verwenden Sie ein einheitliches Format wie Docblock (/*/) für Klassen- und Methodenbeschreibungen, um die Lesbarkeit und die Kompatibilit?t der Werkzeuge zu verbessern. 2. Betonen Sie die Gründe für die Logik, z. B. warum JS -Sprünge manuell ausgeben müssen. 3. Fügen Sie eine übersichtsbeschreibung vor komplexem Code hinzu, beschreiben Sie den Prozess in Schritten und helfen Sie, die Gesamtidee zu verstehen. V. Gute Anmerkungen k?nnen die Kommunikationskosten senken und die Effizienz der Code -Wartung verbessern.

Toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1.onwindows, download undInstallxampp, SelectComponents, Startapache und PlaceFilesinhtdocscs.2.Anternativ, manuellinstallphpfrfr

In PHP k?nnen Sie quadratische Klammern oder lockige Klammern verwenden, um Zeichenfolgenspezifikationsspezifische Indexzeichen zu erhalten, aber quadratische Klammern werden empfohlen. Der Index startet von 0 und der Zugriff au?erhalb des Bereichs gibt einen Nullwert zurück und kann keinen Wert zugewiesen; MB_SUBSTR ist erforderlich, um Multi-Byte-Zeichen zu verarbeiten. Zum Beispiel: $ str = "Hallo"; echo $ str [0]; Ausgabe H; und chinesische Zeichen wie Mb_Substr ($ str, 1,1) müssen das richtige Ergebnis erzielen. In den tats?chlichen Anwendungen sollte die L?nge der Zeichenfolge vor dem Schleifen überprüft werden, dynamische Zeichenfolgen müssen für die Gültigkeit verifiziert werden, und mehrsprachige Projekte empfehlen, Multi-Byte-Sicherheitsfunktionen einheitlich zu verwenden.

Tolearnphpeffectival, startbysettingupalocalerverenVironmentusexs -LikexamppandacodeeditorikevScode.1) InstallxamppForapache, MySQL und Php.SeacodeeditorForsyntaxSupport.3) testyourscludingveliktingveliktelaThbiliodble.Neclyble.NektFile
