Signatures de constructeur inconsistantes
<?php
declare(strict_types=1);
class x {
function __toString() : string {
return "YES";
}
}
function foo(string $a) {}
// piece of syntax of the day (POSOTD)
echo $x = new x;
print " A $x";
// Fata error: Argument #1 ($a) must be of type string, x given, foo($x);
?>
PHP impose que les méthodes aient la même signature dans une classe parente et dans ses classes enfants. Il lève une erreur fatale si ce n’est pas le cas.
Sauf pour les constructeurs, où les signatures peuvent être différentes.
Cette exception à la règle existe pour des raisons de compatibilité ascendante, car de nombreux codes sources ont des signatures variables dans une hiérarchie de classes.
Pourtant, la POO moderne recommande de synchroniser ces signatures, afin de permettre l’instanciation avec le même ensemble d’arguments.
See Also
PHP Features
Last updated: 11 October 2026