Bonjour,

Je suis le tuto sur la POO et je rencontre un problème sur la vidéo concernant l'injection de dépendance.
Tout allé bien jusqu'à la 3ème minute et 43 seconde où je dois rajouter la connection à la base de donnée dans ma fonction sur la ligne 19 (code de la vidéo !).
Et là j'ai cette erreure :
Fatal error: Using $this when not in object context in /Users/zouini/Documents/Sites/www/grafikart/blog/app/App.php on line 22

J'ai revisionné une 2ème fois mais je ne vois pas où j'aurais pu me tromper.

Quelqu'un peut-il m'aider svp ?

Voici le lien de la vidéo : https://www.grafikart.fr/formations/programmation-objet-php/injection

Merci d'avance

PS : super tuto !!!!

7 réponses


PhiSyX
Réponse acceptée

C'est normal, la pseudo-variable $this ne peut être utilisée sur une méthode statique parce que les méthodes statiques peuvent être appelées sans qu'une instance d'objet n'ai été créée et puis quand je regarde la vidéo, il n'y a pas le mot clé static sur la méthode getTable. ^^ (J'ai regardé vers la fin)

Copie le code que tu as dans ton App.php (autour de la ligne 22)

lilou778
Auteur

Voici le code :
public static function getTAble($name) {
$class_name = '\App\Table\' . ucfirst($name) . 'Table';
$test = $this->getDb();
return new $class_name($test);
}

Hello !

Je sais pas si tu as fais attention, mais ton nom de function est getTAble, celle-ci dans la video est nommé getTable. Tu as mis le A en majuscule.
Modifie et réessai ;)

lilou778
Auteur

j'ai renommé le nom de ma fonction mais ça ne change rien.

J'ai du être fatigué. j'ai lu de travers. Effectivement le nom de la fonction n'a rien à voir.

C'est parce que tu appel un $this dans une fonction static. Or ce n'est pas possible.

Dans la video, cette fonction n'est pas en static sur le moment dont tu parles.
Donc soit tu vires le static dans la ligne de ta fonction, soit au lieu du $this tu mets un self::taFonction();

Mais si tu suis la video, la fonction getTable n'est pas static

lilou778
Auteur

Bonjour,

Super c'était bien le static qui posait problème.
Merci beaucoup pour votre aide.

Bonne journée