Überblick über die neue magische Methode __invoke in PHP 5.3

高洛峰
Freigeben: 2023-03-04 15:42:02
Original
1365 Leute haben es durchsucht

PHP hat seit Version 5.3 eine neue magische Methode namens __invoke hinzugefügt. Mit dieser Methode können Sie das Objekt direkt nach dem Erstellen der Instanz aufrufen. Wie im folgenden Beispiel gezeigt:

class testClass
{
public function __invoke
{
print "hello world";
}
}
$n = new testClass;
$n();
Nach dem Login kopieren

Das Ausführungsergebnis ist:

hello world。
Nach dem Login kopieren

Das offizielle Beispiel für PHP lautet wie folgt:

class CallableClass
{
public function __invoke($x)
{
var_dump($x);
}
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
Nach dem Login kopieren

Anhang: Detaillierte Erklärung anderer magischer PHP-Methoden:

Klassen in PHP können magische Methoden verwenden. Es legt fest, dass Methoden, die mit zwei Unterstrichen (__) beginnen, als magische Methoden reserviert sind. Daher wird empfohlen, dass Funktionsnamen nicht mit __ beginnen, es sei denn, dies dient dazu, eine vorhandene magische Methode zu überladen.

Die Funktionsnamen __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state und __clone sind in PHP-Klassen nicht magisch Ihrer Klassen, es sei denn, Sie möchten die damit verbundene magische Funktionalität.

Die folgenden beiden Methoden sind für Eigenschaften konzipiert, die nicht in der Klasse und ihrer übergeordneten Klasse deklariert sind.
__get($property) Diese Methode wird ausgelöst, wenn eine undefinierte Eigenschaft aufgerufen wird, und der übergebene Parameter ist der Name der Eigenschaft, auf die zugegriffen wird.
__set($property,$value) Wenn einer undefinierten Eigenschaft ein Wert zugewiesen wird, wird diese Methode ausgelöst und die übergebenen Parameter sind der Eigenschaftsname und der festzulegende Wert.
Die Nichtdeklaration umfasst hier Attribute, deren Zugriffskontrolle geschützt und privat ist (d. h. Attribute, die keine Zugriffsberechtigung haben), wenn sie mithilfe von Objekten aufgerufen werden.
Wie bei der __get-Methode und der __set-Methode umfasst das Nichtdeklarierte hier Attribute, deren Zugriffskontrolle geschützt und privat ist (d. h. Attribute, die keine Zugriffsberechtigung haben), wenn sie mithilfe eines Objekts aufgerufen werden.

Zu den undefinierten Methoden gehören Methoden, die keine Zugriffsberechtigung haben. Wenn die Methode nicht vorhanden ist, suchen Sie nach der Methode. Wenn sie in der übergeordneten Klasse nicht vorhanden ist, rufen Sie den __call auf ()-Methode dieser Klasse. Wenn die __call()-Methode in dieser Klasse nicht vorhanden ist, wechseln Sie zur __call()-Methode in der übergeordneten Klasse.

__autoload-Funktion, 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.

Hinweis: In der __autoload-Funktion ausgelöste Ausnahmen können nicht vom Catch-Anweisungsblock abgefangen werden und verursachen schwerwiegende Fehler. Sie sollten daher in der Funktion selbst abgefangen werden.

__construct Konstruktormethode, diese Methode wird aufgerufen, wenn ein Objekt erstellt wird. Der Vorteil dieser Methode im Vergleich zu PHP4 besteht darin, dass die Konstruktormethode einen eindeutigen Namen haben kann, unabhängig vom Namen der Klasse im. Auf diese Weise müssen Sie den Namen des Konstruktors nicht ändern, wenn Sie den Namen der Klasse ändern.

__destruct Destruktormethode, PHP ruft diese Methode auf, bevor das Objekt zerstört wird (dh bevor es aus dem Speicher gelöscht wird). Standardmäßig gibt PHP nur den von Objekteigenschaften belegten Speicher frei und zerstört objektbezogene Ressourcen. Mit dem Destruktor können Sie beliebigen Code ausführen, um den Speicher nach der Verwendung eines Objekts zu löschen. Wenn PHP entscheidet, dass Ihr Skript nicht mehr mit dem Objekt verknüpft ist, wird der Destruktor aufgerufen.

Im Namensraum einer Funktion geschieht dies, wenn die Funktion zurückkehrt. Bei globalen Variablen geschieht dies am Ende des Skripts. Wenn Sie ein Objekt explizit zerstören möchten, können Sie der Variablen, die auf das Objekt zeigt, einen beliebigen anderen Wert zuweisen. Weisen Sie die Variable normalerweise auf Null zu oder rufen Sie unset auf.

Die Objektzuweisung in PHP5 verwendet die Referenzzuweisung. Wenn Sie diese Methode aufrufen, ruft das Objekt bei Bedarf automatisch die __clone-Methode auf Bestimmte Vorgänge beim Kopieren des Objekts Der Initialisierungsvorgang kann in der __clone-Methode implementiert werden.

__tostring-Methode wird automatisch aufgerufen, wenn ein Objekt in eine Zeichenfolge konvertiert wird, beispielsweise wenn echo zum Drucken des Objekts verwendet wird.

Vor php5.2.0 kann die __tostring-Methode nur wirksam werden, wenn sie in Kombination mit echo() oder print() verwendet wird. Nach php5.2.0 kann es in jeder String-Umgebung wirksam werden (z. B. über printf() unter Verwendung des %s-Modifikators), es kann jedoch nicht in Nicht-String-Umgebungen verwendet werden (z. B. unter Verwendung des %d-Modifikators). Wenn ab PHP5.2.0 ein Objekt, das die __tostring-Methode nicht definiert, in einen String konvertiert wird, wird ein e_recoverable_error-Fehler gemeldet.

__wakeup Rufen Sie beim Deserialisieren

serialize() auf, um zu überprüfen, ob es in der Klasse eine Funktion mit dem magischen Namen __sleep gibt. Wenn dies der Fall ist, wird die Funktion vor der Serialisierung ausgeführt. Es löscht das Objekt und sollte ein Array zurückgeben, das die Namen aller Variablen im Objekt enthält, die serialisiert werden sollen.

Der Zweck der Verwendung von __sleep besteht darin, alle Datenbankverbindungen des Objekts zu schließen, ausstehende Daten zu übermitteln oder ähnliche Bereinigungsaufgaben durchzuführen. Darüber hinaus ist diese Funktion nützlich, wenn Sie sehr große Objekte haben, die nicht vollständig eingelagert werden müssen.

PHP Umgekehrt prüft unserialize() die Existenz einer Funktion mit dem magischen Namen __wakeup. Diese Funktion kann alle Ressourcen rekonstruieren, über die das Objekt verfügt, sofern vorhanden. Der Zweck der Verwendung von __wakeup besteht darin, alle Datenbankverbindungen wiederherzustellen, die möglicherweise während der Serialisierung verloren gegangen sind, und andere Neuinitialisierungsaufgaben zu erledigen.
Beim Versuch, ein Objekt durch Aufrufen einer Funktion aufzurufen, wird automatisch die __invoke-Methode aufgerufen.

Sie funktioniert ähnlich wie die magische Methode __call(), __callstatic() dient der Verarbeitung statischer Methodenaufrufe.

PHP verschärft die Definition der Methode __callstatic(); sie muss öffentlich sein und als statisch deklariert werden. Ebenso muss die magische Methode __call() wie alle anderen magischen Methoden als öffentlich definiert werden.

Weitere Artikel über die neue magische Methode __invoke in PHP 5.3 finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!