In einigen Szenarien müssen Sie aus Effizienzgründen möglicherweise Klassenmethoden als Rückrufe an andere Funktionen übergeben Ausführung konkreter Aufgaben. Dieser Artikel führt Sie durch die verschiedenen Mechanismen, um dies zu erreichen.
Um eine Funktion als Rückruf zu übergeben, können Sie ihren Namen direkt als Zeichenfolge angeben. Diese Methode ist jedoch nicht auf Klassenmethoden anwendbar.
Klasseninstanzmethoden können als Rückrufe mithilfe eines Arrays mit dem Objekt als erstem Element und dem Methodennamen als übergeben werden zweite. Dieser Ansatz funktioniert sowohl innerhalb als auch außerhalb derselben Klasse.
// Inside the same class
$this->processSomething([$this, 'myCallback']);
$this->processSomething([$this, 'myStaticCallback']);
// Outside the same class
$myObject->processSomething([new MyClass(), 'myCallback']);
$myObject->processSomething([new MyClass(), 'myStaticCallback']);
Statische Klassenmethoden erfordern keine Objektinstanz. Sie können direkt als Array übergeben werden, das den Klassennamen und den Methodennamen enthält.
// Inside the same class
$this->processSomething([__CLASS__, 'myStaticCallback']);
// Outside the same class
$myObject->processSomething(['\Namespace\MyClass', 'myStaticCallback']);
$myObject->processSomething(['\Namespace\MyClass::myStaticCallback']); // PHP 5.2.3
$myObject->processSomething([MyClass::class, 'myStaticCallback']); // PHP 5.5.0
Neben den genannten Methoden können Sie auch anonyme Funktionen als Callbacks übergeben, dies erfordert jedoch möglicherweise Änderungen an Ihrer Codestruktur.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3