Zu den häufig verwendeten magischen Methoden gehören: Tostring () Call() autoLoad() clone() GET() SET() isset() unset()
1.Tostring() wird zum Definieren des Ausgabeobjekts verwendet und beim Verweisen auf aufgerufen. Es wird häufig zum Drucken verwendet Informationen zu einigen Objekten und müssen einen Rückgabewert haben.
Es gibt eine Persionsklasse
Persion per =new persion()
Echo per; //Direkter Aufruf verursacht einen Fehler
Wir können Fügen Sie die tostring()-Methode in die Definition der Klasse ein
Function Tostring() { $str=this->$name.this->age; Return $str; }
2.Clone() Objektkopie
Referenzzuweisung
$per1=$per2 Und das hat nur eine Adresse im Speicher
und $per1=clone $ per2 Es gibt derzeit zwei Speicheradressen
3 Die call()-Methode wird automatisch ausgeführt, wenn eine Funktion aufgerufen wird, die dies tut nicht in der Klasseninstanz vorhanden
Wenn Sie versuchen, eine Funktion aufzurufen, die in der Klasse nicht vorhanden ist, tritt ein Syntaxfehler auf, um eine benutzerfreundliche Eingabeaufforderung bereitzustellen
Wir können die Call()-Methode in der Klasse deklarieren
Function call($funName,$argu) { Echo "名为".$funName."参数为".printf($argh)."的函数不存在", }
4.autoLoad Laden Sie automatisch die von verwendete Klassendatei. Diese Funktion dient zum Hinzufügen von
zur referenzierten Seite. Wenn wir andere PHP-Dateien auf der Seite aufrufen müssen, müssen wir die Methode include verwenden. Aber wenn es Dutzende von Seiten gibt, die dies benötigen Um referenziert zu werden, wäre es zu umständlich, die Autoload-Methode
Function autoload($className) { Include $className.".php"; }
5.GET() Zugriff auf private Attribute in der Klasse
Wenn die Attribute in der Klasse auf private Attribute festgelegt sind, in der Instanz der Klasse Es ist nicht zugänglich, aber wie kann ich darauf zugreifen? Wir können GET() verwenden
Beispiel:
Klasse hat
class person { Private $name; Private $age; }
Per- > $name; //Der Wert kann auf diese Weise nicht abgerufen werden
Aber wenn wir die GET-Methode in der Klasse hinzufügen
Function GET($proName) { Return this->$proName; }
Einige Leute werfen auf diese Weise möglicherweise Fragen auf. Auf diese Weise kann direkt auf private Variablen zugegriffen werden.
Wenn es als öffentlich deklariert ist, können wir es nach Belieben lesen. Wenn es privat ist und wir die Get-Methode hinzufügen, wird der Inhalt der GET-Methode jedes Mal aufgerufen, wenn das private Attribut aufgerufen wird, sodass wir es hinzufügen können etwas Logik für die Get-Methode.
6.SET() legt private Attribute in der Klasse fest
Das Prinzip ist das gleiche wie oben. Wir können der Klasse die SET()-Funktion hinzufügen und ihr einen Wert zuweisen Das private Attribut führt durch Aufrufen der Klasseninstanz die SET-Funktion aus. Funktionsprototyp:
Function SET($proName,$value) { This->$proName=$value; }
7.isset()
wird automatisch aufgerufen, wenn festgestellt wird, ob ein privates Attribut oder eine private Methode in einer Klasse vorhanden ist. Lassen Sie uns zunächst die isset-Methode vorstellen, um zu bestimmen, ob das Attribut und Methode existieren, aber wir können die Klasseninstanz nicht übergeben. Bestimmen Sie, ob ein privates Attribut in der Klasse vorhanden istWenn wir isset(per->$name);// verwenden, ist der Rückgabewert falsch , aber das Attribut $name existiert, wie kann man es lösen?
Lösung:
1. Definieren Sie $name als private Eigenschaft 2. Fügen Sie
< in der Klassendefinition hinzu 🎜 >
Function isset($proName) { Return isset(this->$proName);//再类内部是可以访问私有属性的 }
In Kombination mit unset() können wir Attribute in einer Klasse löschen, wenn es sich um ein öffentliches Attribut handelt, aber wenn es privat ist , wir können es nicht nur durch diese Methode erreichen. Wir können die unset()-Methode verwenden, um diese Funktion zu erreichen Rufen Sie unset($name); auf, um die privaten Attribute in der Personenklasse
zu löschen
Das obige ist der detaillierte Inhalt vonZusammenfassung mehrerer Syntax- und Verwendungsbeispiele für magische Methoden in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!