Signature compatible
<?php
class CallbackWithIntersectionTypehintClass {
#[PHP8] public function __invoke(Exception&Countable $e) : void /*
// public function __invoke(bool $feelingDirty = true): void // */
{ echo __METHOD__; }
}
(new CallbackWithIntersectionTypehintClass)();
Ce bout de code présente une signature qui change selon la version de PHP.
En effet, en PHP 7.x, le commentaire commence par # et va jusqu’à la fin de la ligne. Cela couvre également le /*, donc le commentaire multi-lignes ne commence pas, et la signature de __invoke est la seconde.
En PHP 8.0, l’attribut #[PHP8] se termine par son crochet fermant, et la signature de __invoke commence. En fin de ligne, un commentaire multi-lignes s’ouvre et couvre toute la deuxième ligne.
En fin de compte, ce code reste inchangé entre les versions de PHP, bien qu’il alterne entre deux signatures différentes.
See Also
PHP Features
Last updated: 22 October 2026