New et les parenthèses
<?php
// pre-requisite
$a = 'a';
const ab = 'ab';
class ab {
function __construct() { echo __METHOD__.PHP_EOL; }
}
// create classes
new ab;
new ab();
new (ab);
new ($a.'b');
new (ab::class);
// PHP 9, a wish!
//new ()ab;
?>
Où PHP accepte-t-il les parenthèses dans un appel new ?
Premièrement, aucune parenthèse n’est nécessaire, tant que le constructeur n’a aucun paramètre.
Deuxièmement, les parenthèses sont également possibles après le nom de la classe.
Ensuite, les parenthèses peuvent entourer le nom de la classe, à condition qu’une constante contienne le nom de la classe. Point bonus si la classe et la constante portent le même nom.
Après cela, il y a un appel dynamique, où le nom complet de la classe est construit, puis utilisé.
Et le dernier est la version avec constante, utilisant l’opérateur explicite ::class.
Ce serait bien d’avoir une syntaxe où les parenthèses précèdent le nom de la classe : aucun autre langage ne fait ça ! Alors, pour PHP 9, mais surtout : à quoi ça servirait ?
See Also
- Basics (PHP manual)
- new and parenthesis [Try me]
PHP Features
Last updated: 18 September 2026