1 Verwendung von Erweiterungen zur Implementierung von Vererbung, Überladung und der Bedeutung magischer Methoden
Klasse B erweitert A
Bei der Deklaration muss B keine Methoden in A haben
aufgerufen When $b=new B();
$b->Method() in A;
$b->Attribute in A=1;
$b->Method() in B;
$b->Method() in B;
If $a=new A();
Ja
$a->Method() in A;
$a->Attribute=1 in A;
Nicht möglich
$a->Method() in B;
$a->Method() in B;
Überladung: B erbt A und implementiert in B ein Methodenattribut mit demselben Name als A.
Das „Überladen“ in PHP unterscheidet sich von den meisten anderen objektorientierten Sprachen. Das traditionelle „Überladen“ wird verwendet, um mehrere Klassenmethoden mit demselben Namen bereitzustellen, aber jede Methode hat unterschiedliche Parametertypen und -nummern.
Magische Methode: PHP behandelt alle Klassenmethoden, die mit __ (zwei Unterstriche) beginnen, als magische Methoden. Wenn Sie also Ihre eigenen Klassenmethoden definieren, stellen Sie ihnen nicht __ voran.
2 Erben Sie mithilfe der Sichtbarkeit von privaten und geschützten Zugriffsmodifikatoren
Die Attributmethode „privat“ kann nicht vererbt werden
Die Attributmethode „geschützt“ ist außerhalb der Klasse nicht sichtbar und kann vererbt werden
Auf die durch die öffentliche Attributmethode definierten Klassenmitglieder kann überall zugegriffen werden
3 Anwendung des Doppelpunkts:: in PHP
Die Operation „::“ wird häufig in PHP-Klassen gesehen Code-Operator, dies ist der Bereichsqualifizierungsoperator, dargestellt durch einen Doppelpunkt „::“, der verwendet wird, um die Ebenen verschiedener Bereiche in der Klasse anzugeben. Die linke Seite ist der Bereich und die rechte Seite sind die Mitglieder des Zugriffsbereichs.
In PHP sind zwei Bereiche definiert: self und parent (statischer Bereich wird in PHP6 bereitgestellt). Der
Bereichsauflösungsoperator (auch bekannt als Paamayim Nekudotayim) oder einfacher ein Doppelpunktpaar kann auch für den Zugriff auf statische Elemente, Methoden und Konstanten verwendet werden kann in Unterklassen verwendet werden, um Mitglieder und Methoden in übergeordneten Klassen zu überschreiben.
class MyClass {
const CONST_VALUE = 'A konstanter Wert';
}
echo MyClass::CONST_VALUE;
class OtherClass extends MyClass
{
public static $my_static = 'static var';
öffentliche statische Funktion doubleColon () {
echo parent::CONST_VALUE "n"; echo
self::$my_static "n"; }}
OtherClass
::doubleColon(); //Unterklasse deckt übergeordnete Klasse ab
Klasse
MyClass
{geschützte Funktion
myFunc
() { echo "MyClass::myFunc()n"
; }}class
OtherClass
extends MyClass{
// Methoden in der übergeordneten Klasse überschreiben
öffentliche Funktion
myFunc() { // Die überschriebene Methode kann jedoch weiterhin
aufgerufen werden parent
::myFunc(); echo "OtherClass::myFunc()n"
; }}
$class
= new OtherClass(); $class
->myFunc();4 php Die Rolle von this, self und parent
this: ist ein Zeiger auf die aktuelle Objektinstanz, nicht auf ein anderes Objekt oder eine andere Klasse.
self: Stellt den Bereich der aktuellen Klasse dar. Im Gegensatz dazu stellt es keine bestimmte Instanz der Klasse dar. Self kann nicht in Code außerhalb der Klasse verwendet werden und kann sich nicht in der Vererbungshierarchie identifizieren. Standort. Das heißt, wenn self in einer erweiterten Klasse verwendet wird, ruft es nicht die Methode der übergeordneten Klasse auf, sondern die überladene Methode der erweiterten Klasse. Self zeigt auf die Klasse selbst, das heißt, self zeigt nicht auf ein instanziiertes Objekt.
Im Allgemeinen wird self verwendet, um auf statische Variablen in der Klasse zu verweisen.
private static $firstCount = 0;
private $lastCount;
//Konstruktorfunktion
function __construct()
{
$this->lastCount = ++self:$ firstCount; //Verwenden Sie self, um statische Variablen aufzurufen. Sie müssen Folgendes verwenden::(Domänenoperatorsymbol)
}
Parent: Gibt den Bereich der übergeordneten Klasse der aktuellen an Klasse, und der Rest folgt. Die Eigenschaften des Selbst sind die gleichen. parent ist ein Zeiger auf die übergeordnete Klasse. Im Allgemeinen verwenden wir parent, um den Konstruktor der übergeordneten Klasse aufzurufen.
//Geerbter Klassenkonstruktor
function __construct( $personSex, $personAge )
{
parent::__construct( "test" ); //Use parent to call The Konstruktor der übergeordneten Klasse
$this->personSex = $personSex;
$this->personAge = $personAge;
}
5 Konstruktor und Analyse-Konstruktor
Eine Klasse mit einem Konstruktor ruft diese Methode jedes Mal zuerst auf, wenn ein Objekt erstellt wird. Daher eignet sie sich sehr gut für einige Initialisierungsarbeiten vor der Verwendung des Objekts.
Funktion __construct() {}
Wenn ein Konstruktor in einer Unterklasse definiert ist, wird der Konstruktor seiner übergeordneten Klasse nicht heimlich aufgerufen. Um den Konstruktor der übergeordneten Klasse auszuführen, müssen Sie parent::__construct() im Konstruktor der Unterklasse aufrufen.
PHP 5 führte das Konzept von Destruktoren ein, ähnlich wie bei anderen objektorientierten Sprachen wie C++. Ein Destruktor wird ausgeführt, wenn alle Verweise auf ein Objekt entfernt werden oder wenn das Objekt explizit zerstört wird.
Funktion __destruct() {}
6 letzte Schlüsselwörter
PHP 5 Ein neues endgültiges Schlüsselwort hinzugefügt. Wenn eine Methode in der übergeordneten Klasse als endgültig deklariert ist, kann die Unterklasse die Methode nicht überschreiben. Wenn eine Klasse als endgültig deklariert ist, kann sie nicht vererbt werden.
7 Vererbung und Konstruktor
父类 |
子类 |
结果 |
有构造函数 |
无构造函数 |
父构造 |
有构造函数 |
有构造函数 |
子构造 |
8 Schnittstelle
Sie können eine Schnittstelle über die Schnittstelle definieren, genau wie die Definition einer Standardklasse.
Hinweis:
1) Aber alle darin definierten Methoden sind leer
2) Alle in der Schnittstelle definierten Methoden müssen sein öffentlich, das ist das Merkmal der Schnittstelle
3) Bei der Implementierung mehrerer Schnittstellen darf die Methode in der Schnittstelle nicht denselben Namen haben
4 )-Schnittstelle kann auch mit dem Operator
extends vererbt werden;
5) Konstanten können auch in der Schnittstelle definiert werden. Schnittstellenkonstanten und Klassenkonstanten werden genau gleich verwendet. Sie sind alle feste Werte und können nicht durch Unterklassen oder Unterschnittstellen geändert werden.
//Deklarieren Sie eine 'iTemplate'-Schnittstelle
Schnittstelle iTemplate
{öffentliche Funktion
setVariable($name, $var);öffentliche Funktion
getHtml($template);}
// Implementieren Sie die Schnittstelle // Die folgende Schreibweise ist korrekt
class Template implements iTemplate
{ private
$vars = array();
öffentliche Funktion
setVariable($name, $var) {
$this
->vars[$name] = $var; }
öffentliche Funktion
getHtml
($template) { foreach(
$this
->vars as $name => $value) { >.'}'
, $value, $template); ; }}9 Eigenschaften
Die variablen Mitglieder der Klasse werden „Eigenschaften“ genannt, die Attributdeklaration beginnt mit dem Schlüsselwort
public oder protected
oder
private
, gefolgt von einer Variablen. Die Variablen in den Attributen können initialisiert werden, aber der initialisierte Wert muss eine Konstante sein. Die Konstante bezieht sich hier auf die Konstante, die sich das PHP-Skript in der Kompilierungsphase befindet, und nicht auf die Konstante, die in der laufenden Phase nach der Kompilierungsphase berechnet wird.
In PHP5 sind zwei Funktionen „__get()“ und „__set()“ vordefiniert, um seine Attribute abzurufen und zuzuweisen, und „__isset()“, um die Attribute zu überprüfen und zuzuweisen Methode „__unset()“ zum Löschen von Attributen.
Einfach ausgedrückt besteht die eine darin, den Wert zu erhalten, und die andere darin, den Wert zuzuweisen. , die beiden Methoden „__set()“ und „__get()“, diese beiden Methoden existieren nicht standardmäßig, sondern werden manuell zur Klasse hinzugefügt. Wie die Konstruktormethode (__construct()) werden sie der Klasse hinzugefügt. Diese beiden Methoden können Sie natürlich auch entsprechend Ihrem persönlichen Stil hinzufügen: //__get() Methode wird verwendet, um private Attribute abzurufen ansehen
Klarschrift
in die Zwischenablage
- class Person{ 🎜>//Das Folgende sind die Mitgliedsattribute von Personen
- privat
- $name// Der Name der Person privat
$sex- ; /Geschlecht der Person privat $Alter
; /Alter der Person - //__get()-Methode wird verwendet, um private Attribute zu erhalten privat
- Funktion __get(
$property_name- ){ if(isset($this->
$property_name
)){ return($this->
$property_name
); }else { return(NULL); }
}
}
//__set( )-Methode wird verwendet, um privat festzulegen Eigenschaften
privat
Funktion __set( $property_name
, $value){ $this-> ;$property_name =
$value
; //__isset() method privat
Funktion
__isset($nm
){
echo
"isset()-Funktionsbestimmung, privates Mitglied, automatisch aufrufen
"; return isset($this->
$nm); ) Methode privat
Funktion __unset($nm ){ echo
“ wird automatisch aufgerufen, wenn die unset()-Funktion außerhalb der Klasse verwendet wird, um ein privates Mitglied zu löschen < br>"
; unset(
$this-> $nm); }
} =neu Person(); 🎜>"das ist ein Personenname"
;
//Bei Verwendung der isset()-Funktion zur Bestimmung von privat Mitglieder, __isset() wird automatisch aufgerufen. Die Methode hilft uns beim Vervollständigen und das Rückgabeergebnis ist wahr echo
var_dump(isset(
$p1->name)).
"
";
$p1->name."
"; Wenn Sie die Funktion unset() zum Löschen privater Mitglieder verwenden, wird die Methode __unset() automatisch aufgerufen, um uns bei der Vervollständigung zu helfen . Löschen Sie das private Attribut „name“
unset($p1->name); 🎜>// wurde gelöscht, daher erfolgt keine Ausgabe für diese Zeile
echo
$p1->name; [php] Ansicht
Klarschrift
- class Person{ //Im Folgenden sind die Mitgliedsattribute der Person privat $ aufgeführt name; / /Name der Person privat $sex; //Geschlecht der Person privat $age; //Alter der Person //__get() Methode wird verwendet, um private Eigenschaften zu erhalten private Funktion __get($property_name){ if(isset($this-> ; $property_name)){ return($this->$property_name);}else
- { return (NULL); } } } //__set()-Methode wird zum Festlegen privater Eigenschaften verwendet private Funktion __set($property_name, $value){ $this->$property_name = $value } / /__isset() Methode private Funktion __isset($nm){ echo "isset() Funktion ruft automatisch auf, wenn ein privates Mitglied ermittelt wird
"; return isset($this->$nm); } //__unset() Methode private Funktion
- __unset($nm){ echo "Wird automatisch aufgerufen, wenn die Funktion unset() außerhalb der Klasse verwendet wird, um ein privates Mitglied zu löschen
"; unset($this ->$nm); } } $p1=neu Person(); $p1->name="das ist ein Personenname"; > //Wenn Sie die Funktion isset() zum Messen privater Mitglieder verwenden, wird die Methode __isset() automatisch aufgerufen, um uns bei der Vervollständigung zu helfen, und das Rückgabeergebnis ist true echo var_dump(isset($p1->name))."
"; echo $p1->name."
"; //Wenn Sie die Funktion unset() zum Löschen privater Mitglieder verwenden, wird die Methode __unset() automatisch aufgerufen, um uns bei der Erledigung der Aufgabe zu helfen Löschen Sie das private Attribut „name“ unset(- $p1->name); >//wurde gelöscht, daher wird diese Zeile nicht ausgegeben. echo $p1->name ?> 10 Klonen Objektkopie Dies kann mit dem Schlüsselwort clone erfolgen (wenn die Methode __clone() im Objekt vorhanden ist, wird sie zuerst aufgerufen). Die Methode __clone() in einem Objekt kann nicht direkt aufgerufen werden. Wenn das Objekt kopiert wird, führt PHP5 eine „flache Kopie“ aller Eigenschaften des Objekts durch. Die -Referenzen in allen Attributen bleiben unverändert
und verweisen auf die ursprünglichen Variablen. Wenn die Methode __clone() definiert ist, wird die Methode __clone() im neu erstellten Objekt (dem durch Kopieren generierten Objekt) aufgerufen und kann verwendet werden, um den Wert des Attributs zu ändern (falls erforderlich).
11 PHP-Referenz
dient zum Hinzufügen des &-Symbols vor Variablen, Funktionen, Objekten usw.
in PHP-Anführungszeichen bedeutet: Verschiedene Namen greifen auf denselben Variableninhalt zu. unterscheidet sich von Zeigern in der C-Sprache. Der Zeiger in der C-Sprache speichert die Adresse, an der der Inhalt der Variablen im Speicher gespeichert ist. VariablenreferenzMit der Referenz von PHP können Sie zwei Variablen als Referenz verwenden Der gleiche Inhalt[php] $a="ABC";$b =&$a;echo $a;//Ausgabe hier: ABCecho $b;//Hier Ausgabe:ABC$b="EFG";echo $a;//Der Wert von $a wird hier zu EFG, also geben Sie EFG ausecho $b;//EFG hier ausgeben?>[/php] Funktionsübergabe Aufruf per AdresseIch werde nicht näher auf den Anruf per Adresse eingehen. Der Code ist direkt unten angegeben[php] Funktionstest(& $a){$a=$a+100;} $ b=1;echo $b;//Ausgabe 1test($b); //Was $b an die Funktion übergeben wird hier ist tatsächlich $b Die Speicheradresse, an der sich der Variableninhalt befindet. Sie können den Wert von $b ändern, indem Sie den Wert von $a in der Funktion echo "
" ändern. echo $b;//Output 101[/php]Es sollte beachtet werden, dass, wenn Sie testen(1) ; Hier tritt ein Fehler auf. Denken Sie über die Referenzrückgabe der Funktion nach. Schauen Sie sich zuerst den Code an [php]function &test (){static $b=0;//Eine statische Variable deklarieren $b=$b+1; echo $b;return $b; }$a=test( );//Diese Anweisung gibt den Wert von $b als 1 aus$a=5; $a=test();//Diese Anweisung Der Wert von $b wird als 2 ausgegeben$a=&test();//Diese Anweisung gibt den Wert von $ aus b as 3$a=5 ;$a=test();//Diese Anweisung gibt den Wert von $b als 6[/php]
Erklären Sie unten:
Auf diese Weise erhalten Sie $a=test(); nicht wirklich eine Funktionsreferenzrückgabe , was sich nicht von einem gewöhnlichen Funktionsaufruf unterscheidet: Dies ist PHP. Es ist festgelegt, dass
PHP festlegt, dass die Referenzrückgabe der Funktion über $a=&test() erhalten wird. ;
Was ist eine Referenzrückgabe (im PHP-Handbuch heißt es: Referenzrückgabe wird verwendet, wenn Sie eine Funktion verwenden möchten, um herauszufinden, an welche Variable die Referenz gebunden werden soll). ) Dieser Unsinn hat es mir lange Zeit unmöglich gemacht, ihn zu verstehen.
Um es anhand des obigen Beispiels zu erklären, wird die Funktion in der Methode $a=test() aufgerufen, die nur die Funktion ändert Der Wert der Funktion wird nur $a zugewiesen, und alle Änderungen an $a wirken sich nicht auf $b
in der Funktion aus. Wenn die Funktion über $a=&test() aufgerufen wird, lautet ihre Funktion Die Speicheradresse der $b-Variablen in Return $b und die Speicheradresse der $a-Variablen zeigen auf denselben Ort
, was das Äquivalent dieses Effekts erzeugt ($a=&b;) also ändere $ Der Wert von a ändert auch den Wert von $b, also nach der Ausführung von
$a=&test();
$a=5;
Danach wird der Wert von $b 5
Die statische Variable wird hier verwendet, um jedem die Referenzrückgabe der Funktion verständlich zu machen Die Funktion wird hauptsächlich in Objekten verwendet
Objektreferenz
[php]
Klasse a{
var $abc="ABC";
}
$b=new a;
$c=$ b;
echo $b->abc;//ABC hier ausgeben
echo $c->abc; //ABC hier ausgeben
$b->abc="DEF";
echo $c->abc;//DEF hier ausgeben
?>
[/php]
Der obige Code ist der laufende Effekt in PHP5
In PHP5, das Kopieren von Objekten wird durch Referenzen realisiert. In der obigen Spalte entspricht $b=new a; $c=$b; tatsächlich $b=new $c=&$b;
Die Standardeinstellung in PHP5 ist „call“. Objekte per Referenz, aber manchmal möchten Sie vielleicht eine Kopie eines Objekts erstellen und hoffen, dass Änderungen am Originalobjekt keine Auswirkungen auf die Kopie haben. Zu diesem Zweck definiert PHP eine spezielle Methode namens __clone.
Die Rolle von Referenzen
Wenn das Programm relativ groß ist, viele Variablen auf dasselbe Objekt verweisen und Sie es nach der Verwendung des Objekts manuell löschen möchten, empfehle ich persönlich die Verwendung des „&“ "-Methode und verwenden Sie dann die Methode $var = null zum Löschen. Andernfalls verwenden Sie die Standardmethode von PHP5. Darüber hinaus wird für die Übertragung großer Arrays in PHP5 empfohlen, schließlich die Methode „&“ zu verwenden spart Speicherplatz.
Referenz aufheben
Wenn Sie eine Referenz aufheben, brechen Sie einfach die Bindung zwischen dem Variablennamen und dem Variableninhalt auf. Dies bedeutet nicht, dass die Variableninhalte zerstört werden.Zum Beispiel:
$a = 1;
$b =& $ a ;
unset ($a);
?>
wird $b nicht deaktivieren, nur $a.
Globale Referenz
Wenn Sie eine Variable mit globalem $var deklarieren, erstellen Sie tatsächlich eine Referenz auf die globale Variable. Mit anderen Worten, es ist dasselbe wie:
$var =& $GLOBALS["var"] ;
?>
Das bedeutet, dass beispielsweise durch unset $var keine globale Variable gelöscht wird.
$this
In einer Methode eines Objekts ist $this immer eine Referenz auf das Objekt, das es aufruft.
//Hier ist noch eine kleine Episode
Die Zeigerfunktion (ähnlich dem Zeiger) der Adresse in PHP wird nicht vom Benutzer selbst implementiert, sondern von ihm Zend Core, die Referenz in PHP übernimmt das Prinzip „Copy-on-Write“, das heißt, solange keine Schreiboperation stattfindet, werden Variablen oder Objekte, die auf dieselbe Adresse zeigen, nicht kopiert.
In Laienbegriffen
1: Wenn es den folgenden Code gibt
[php]
$a="ABC";
$b=$a;
[/php]
Tatsächlich verweisen $a und $b zu diesem Zeitpunkt beide auf dieselbe Speicheradresse, anstatt dass $a und $b unterschiedliche Speicher belegen
2: Wenn Sie den folgenden Code zum obigen Code hinzufügen
[php]
$a="EFG";
[/php]
Da die Daten im Speicher, auf die $a und $b verweisen, neu geschrieben werden müssen, ermittelt und erstellt der Zend-Kern zu diesem Zeitpunkt automatisch eine Datenkopie von $a für $b und beantragt sie erneut ein Stück Erinnerung zum Speichern
Das Obige hat die Essenz von objektorientiertem PHP vorgestellt, einschließlich inhaltlicher Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.