Faire new dans __construct()

hikaru-59
Invité n'ayant pas de compte PHPfrance

11 oct. 2021, 17:06

Bonjour,
J'ai commencé par apprendre le php objet. J'ai vu des scripts où on utilise new dans __construct().
J'essaye de faire cela dans un de mes scripts pour voir si ça marche, mais ça ne marche pas :

Code : Tout sélectionner

class Model { public $message = "Bonjour, je suis Tom !"; public function __construct($message) { $this->message = $message; } } class Article { private $model; public function __construct() { $this->model = new Model(); echo $this->model; } } $article = new Article(); // Doit afficher normalement : "Bonjour, je suis Tom !"
J'ai l'erreur : Fatal error: Uncaught ArgumentCountError: Too few arguments to function Model::__construct().
J'ai vu qu'on peut faire avec de cette façon (qu'on appelle injection de dépendance je crois), et ça ne marche pas non plus :

Code : Tout sélectionner

class Article { private $model; public function __construct(Model $model) { $this->model = $model; echo $this->model; } } $article = new Article();

Mammouth du PHP | 2680 Messages

11 oct. 2021, 17:09

public function __construct($message) {
$this->model = new Model();
Too few arguments to function Model::__construct()

que veut dire la dernière ligne ?

Petit nouveau ! | 8 Messages

11 août 2023, 18:09

Bonjour,
Lorsque vous instanciez une classe comme ceci :
new Model();
PHP va automatique appeler le constructeur de la classe (cad la méthode __construct() ).

Tel que vous avez écrit votre code, le constructeur de la classe Model nécessite qu'on lui passe un message en argument :
public function __construct($message) {
}

il faut donc instancier la classe avec un message en argument :
new Model("exemple de message");

L'erreur "Too few arguments to function Model::__construct()" signifie que vous avez essayé d'instancier la classe Model sans fournir les arguments nécessaires (ici le message).