Compatibilité mixed
<?php
class x { function foo(int $a, int ...$args) {} }
class y extends x { function foo( int ...$args) {} } // OK!
//class z extends x { function foo(int $a, int $b, int ...$args) {} } // KO
class x2 { function foo() {} }
class y2 extends x2 { function foo(mixed ...$args) {} } // OK!
//class y22 extends x2 { function foo(mixed $a, mixed ...$args) {} } // KO
class x4 { function foo($a, $b) {} }
class y4 extends x4 { function foo($b, $c, $d) {} } // OK!
//class y22 extends x2 { function foo(mixed $a, mixed ...$args) {} } // KO
class x3 { function foo(mixed ...$args) {} }
//class y3 extends x3 { function foo() {} } // KO
//class y32 extends x3 { function foo(mixed $a) {} } // KOx
class x4 { function foo(int $a, int $b) {} }
class y4 extends x4 { function foo(int $b, int $a) {} } // KO
La compatibilité de méthodes signifie que les méthodes éponymes doivent avoir le même nombre d’arguments et des types compatibles.
Un cas particulier est l’utilisation du variadique : avec lui, il est autorisé de supprimer des arguments, à condition qu’ils soient du même type et adjacents au variadique.
Avec un variadique mixed, il est également possible de passer de zéro argument à un argument. L’inverse n’est pas possible : on ne peut pas supprimer un mixed ...$args une fois qu’il a été ajouté.
See Also
- mixed variadic magic [Try me]
PHP Error Messages
PHP Features
Last updated: 18 September 2026