Dans certains scénarios, vous devrez peut-être transmettre des méthodes de classe en tant que rappels à d'autres fonctions pour plus d'efficacité exécution de tâches spécifiques. Cet article vous guide à travers les différents mécanismes pour y parvenir.
Pour transmettre une fonction en tant que rappel, vous pouvez directement fournir son nom sous forme de chaîne. Cependant, cette méthode ne s'applique pas aux méthodes de classe.
Les méthodes d'instance de classe peuvent être transmises sous forme de rappels à l'aide d'un tableau avec l'objet comme premier élément et le nom de la méthode comme premier élément. deuxième. Cette approche fonctionne à la fois à l'intérieur et à l'extérieur de la même classe.
// 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']);
Les méthodes de classe statique ne nécessitent pas d'instance d'objet. Ils peuvent être passés directement sous forme de tableau contenant le nom de la classe et le nom de la méthode.
// 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
Outre les méthodes mentionnées, vous pouvez également transmettre des fonctions anonymes comme rappels, mais cela peut nécessiter des modifications de la structure de votre code.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3