Hello :)
Mmmh on dirait un problème de type... Fais voir ton autoloader et ta classe appelée complète?
Bonjour j'ai une function qui doit se connecter à ma bdd via ma function getDB, j'utiliser pour ça le mots $this mais sur mon navigateur ont m'indique que le mots cké $this n'est pas bon. Du coup j'ai beau essayer plusieurs syntaxes mais ça ne fonctionne jamais ... , Avez vous une solution ?
je suis ce tuto : https://grafikart.fr/tutoriels/injection-571
Ce que j'obtiens
Erreur fatale : Erreur non détectée : Utilisation de $this lorsqu'il n'est pas dans le contexte de l'objet dans C:\xampp\htdocs\gra\app\App.php:30 Stack trace : #0 C:\xampp\htdocs\gra\public\index.php (11) : App\App::getTable('Posts') #1 {main} lancé dans C:\xampp\htdocs\gra\app\App.php à la ligne 30
Hello :)
Mmmh on dirait un problème de type... Fais voir ton autoloader et ta classe appelée complète?
/////////////////////// Mon autoloader .php
/////////////////////// Mon fichier App.php
Okay voila le problème, tu utilises this pour acceder à des propriétés statiques, PHP n'accepte pas ça, il faut que tu vires les attributs static, en gros dans PHP c'est du tout ou rien, soit tu mets des static PARTOUT, soit tu n'en mets pas (et bon mieux vaut pas en mettre, le static va te pousser à la mauvaise pratique)
Ensuite si malgré tout tu veux mettre du static partout, alors tu ne peux pas utiliser $this->, il faut utiliser self:: puis adapter le code
Donc j'enleve les static de tout mes fichiers ? Je suis le tuto de grafikart sur Injection de dépendances et il ne fait pas ça.
Alors, le tuto est extrêmement ancien donc ptet qu'il y a eu du nouveau, eeeet le static ce n'est pas une injection de dépendance :p
Et yep tu fera un new au lieux d'invoquer un static plus propre ^^
Oui je sais bien que le static n'est ps une injection , le probléme c'est que dans ma fun tion quan dont fait new la db doit se connecter en meme temps
Mmmh ce qu'il faudrait faire c'est créer une nouvelle classe Database, et mettre la function getDb
Dans ton index tu fais un new Database, tu t'y connectes, et tu enregistres ça dans une variable, en principe faut faire ça, c'est un principe du SOLID (si tu connais pas le SOLID, regardes des vidéos dessus, je crois que Grafikart en a fait une, c'est la bible du dev php :p)
Enfaite je sais déja le faire en solid mais mon but est d'apprend les injections
Alors, le fait de mettre une instance DB dans l'App c'est pas très "S" de SOLID, ta class App fait tout :p
Pour faire de l'injection, il faudrait faire un truc dans ce style:
Bon mainteant en vrai la class App m'a l'air d'être un manager global, le mieux ça aurait été de faire une class Database, une class HomePage, et une class App, dans ta class HomePage tu places ton titre "mon super site", et dans Database bah tout ce qui est lié à la DB, et tu injectes le tout dans la class App qui va piloter ces deux class, et dans un second temps tu injectera un router pour injecter dynamiquement un HomePage ou un AboutPage dans ta class App, pour cela faudra apprendre les "interfaces php", mais c'est dans un second temps, t'embrouilles pas la tête avec ça pour l'instant :p