Normal tu dis que c'est une instance de Database hors que tu lui injecte mysqlDatabase donc remplace par mysqlDatabase dans le constructde ta classe Table
Bonjour,
Je suis en train de suivre le tuto POO de grafikart, et je rencontre un problème au niveau de la vidéo 18 (en précisant que j'ai déjà commencé le refactoring fait dans la vidéo 19 en espérant que je comprendrais le problème).
En gros je me retrouve avec l'erreur suivante :
Voici ma class App.php
Et ici le code de ma class Core\Table\Table.php
Le var_dump de $db dans le construct de table me retourne ceci :
Le tout étant appelé comme ci-dessous :
Et donc ce que je ne comprends pas c'est qu'il demande une instance de Core\Database\Database et qu'on lui envoie l'instance de Core\Database\mysqlDatabase qui a en extends la class Database et dans la vidéo ça fonctione.
Merci d'avance pour vos réponses.
6 réponses
Merci de ta réponse, j'avais déjà essayé ceci et voilà ce qu'il me retourne :
en mettant :
Dans ta fonction getTable tu fais $this->getDb hors que getDb est en static essaye en mettant self::getDb() dans getTable()
Oui j'ai modifié ça tout à l'heure, mais ce n'était pas ça, en revanche j'ai trouvé l'origine du problème.
Dans ma class mysqlDatabase j'avais une fonction query qui prend en paramètre optionnel un $className pour pouvoir changer le fetchMode en FETCH_CLASS si le paramètre est précisé, dans l'autre cas ça le met en FETCH_OBJ :
Et la méthode que j'appelais pour aller chercher mon contenu utilisait la méthode query de ma class mysqlDatabse avec l'option $className précisée et donc passait le fetchMode en FETCH_CLASS. _Dès que je ne précise plus le paramètre ça fonctionne, mais je comprends pas pourquoi, ça voudrait dire du coup que ça ne fonctionnerait plus dès que le fetchMode est en FETCHCLASS ? Mais pourqoi ? J'aimerais quand même pouvoir l'utiliser en FETCH_CLASS ça ne m'arrange pas. ^^
Salut Elv !
J'étais entrain de regarder la vidéo et j'ai eu le même soucis que toi. En fait, le problème vient du fait que PDO appelle le constructeur sans paramètres. Du coup, il lui est impossible de créer la classe que tu lui demandes !
Tu peux donc spécifier ceci pour ton constructeur:
Cependant, un autre problème survient: Les objets créés par PDO ne pourront pas passer d'appels à la DB, puisque leur variable $db sera null.
Merci de ta réponse !
Finalement j'ai résolu le problème en poursuivant la vidéo Refactoring, car par la suite on passe en paramètre CLASS le fichier entity correspondant à la table appelée plutôt que la class table en cours.
Ce qui au final est plus pratique car l'utilisation des entity clarifie pas mal le tout :)