Méthode __invoke() et propriétés
<?php
class x {
private X $y;
function __invoke() { echo __METHOD__;}
function foo() {
$this->y = new X;
$this->y();
// better this way
($this->y)();
}
}
(new X)->foo();
Dans le code présenté, __invoke() rend la classe X invocable : l’objet peut être utilisé comme nom de fonction et appellera la méthode magique __invoke.
Ensuite, dans la même classe, il y a une propriété $y, dont le type est X. Cette propriété contient donc un objet invocable. Serait-il alors possible d’appeler cette propriété comme une méthode, et de l’invoquer ?
Eh bien, non. Cet appel produira une erreur : undefined method y. PHP n’utilise pas __invoke() ici, car cela entrerait en conflit avec une méthode y existante. De plus, cela créerait une méthode sensible à la casse, car la propriété $Y n’existe pas.
Pour invoquer l’objet contenu dans la propriété y, il faut mettre des parenthèses autour de l’objet, afin que PHP puisse l’extraire et l’invoquer en toute sécurité.
See Also
PHP Features
Last updated: 11 October 2026