sunandgirl
Messages postés7Date d'inscriptionlundi 4 avril 2016StatutMembreDernière intervention 2 août 2016
-
1 août 2016 à 16:59
nagaD.scar
Messages postés4280Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 2023
-
2 août 2016 à 17:50
Bonjour,
Je suis un tutoriel sur la programmation orientée objet en php. Mais voila, je rencontre un petit problème avec mon code.
Voici mon fichier users.php
sunandgirl
Messages postés7Date d'inscriptionlundi 4 avril 2016StatutMembreDernière intervention 2 août 2016 2 août 2016 à 17:02
<?= ... ?>
c'est la version abréger de
<?php echo ...; ?>
Selon plusieurs commentaires que j'ai eu, ce n'est pas une bonne pratique mais ce n'est pas la solution à mon problème. J'ai toutefois changer ma syntaxe pour en être sur et malheureusement j'ai encore mon problème. Après plusieurs tests, je sais d'où vient le problème mais je n'ai pas encore trouver ce qui ne va pas.
C'est que mon objet
$users
est de type stdclass tandis qu'elle devrait être de type ModelUsers. Dans ce cas,
Mais j'aurais bien aimer comprendre pourquoi il ne fonctionne pas...
sunandgirl
Messages postés7Date d'inscriptionlundi 4 avril 2016StatutMembreDernière intervention 2 août 2016 2 août 2016 à 17:27
Je faisais référence à la classe elle même, elle ne pouvait donc pas fonctionner. J'ai créer une autre classe pour mettre les méthodes créer un objet de cette classe avec ma base de données. Merci beaucoup pour ton coup de main!
nagaD.scar
Messages postés4280Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202316 2 août 2016 à 17:47
Ok merci pour l info, je dois être un peu a la ramasse sur les quelques nouveautées de syntaxe ^^
Du coup je vais essayer de comprendre le tout en même temps.
Premier point:
$class_name = '\\App\\Model\\Model' . ucfirst($name); return new $class_name($this->getDb());
Si je comprends bien, le but est de créer une classe via la méthode App::getTable qui, en utilisant un nom de classe en parametre va faire l allocation (et du coup la lecture en bdd sera dans le constructeur).
Pour la méthode "__get" , c est un copié collé entre ModelUsers qui est l extension de Model => inutile de le réecrire. ( c est d ailleurs pas impossible que ca pose probleme vu que le parent est censé passer en premier mais j ai un doute).
Ensuite dans ta fonction "ModelUsers::geturl", tu renvois "$this->id_user" alors que id_user n'appartient pas à la classe , ce qui est logique vue que tu est censé avoir plus d un utilisateur OR ta classe représente une table.
$user ne sera en aucuns cas un ModelUsers! tu retourne
$this->query("SELECT * FROM " . $this->table);
et donc un tableau de row qui en aucuns cas ne connais de fonction "getUrl".
En fait j ai l impression que le but était d'implémenter un objet par entrée dans ta BDD , Model devant être le conteneur et ModelUsers représentant un objet de ce conteneur (et donc pas une extension). Je penses que tu t'es un peu emmelé les pinceaux ^^
nagaD.scar
Messages postés4280Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202316 2 août 2016 à 17:48
(j essayerai de prendre un peu de temps demain pour corriger)
nagaD.scar
Messages postés4280Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202316 2 août 2016 à 17:50
ah ok du coup t as trouvé pendant ma recherche ^^ et en fait t'es arrivé au même point ! ca va je me suis pas trop paumé =p
2 août 2016 à 17:02
c'est la version abréger de
Selon plusieurs commentaires que j'ai eu, ce n'est pas une bonne pratique mais ce n'est pas la solution à mon problème. J'ai toutefois changer ma syntaxe pour en être sur et malheureusement j'ai encore mon problème. Après plusieurs tests, je sais d'où vient le problème mais je n'ai pas encore trouver ce qui ne va pas.
C'est que mon objet est de type stdclass tandis qu'elle devrait être de type ModelUsers. Dans ce cas, fonctionnerait. Mais lorsque je fais, afin de le mettre en ModelUsers, c'est là que tout plante.
Pour le moment j'ai régler mon problème en écrivant
au lieu d'utiliser le FETCH_CLASS.
Mais j'aurais bien aimer comprendre pourquoi il ne fonctionne pas...
2 août 2016 à 17:27
2 août 2016 à 17:47
Du coup je vais essayer de comprendre le tout en même temps.
Premier point:
avec l instantiation :
Si je comprends bien, le but est de créer une classe via la méthode App::getTable qui, en utilisant un nom de classe en parametre va faire l allocation (et du coup la lecture en bdd sera dans le constructeur).
Pour la méthode "__get" , c est un copié collé entre ModelUsers qui est l extension de Model => inutile de le réecrire. ( c est d ailleurs pas impossible que ca pose probleme vu que le parent est censé passer en premier mais j ai un doute).
Ensuite dans ta fonction "ModelUsers::geturl", tu renvois "$this->id_user" alors que id_user n'appartient pas à la classe , ce qui est logique vue que tu est censé avoir plus d un utilisateur OR ta classe représente une table.
Enfin:
Puis :
$user ne sera en aucuns cas un ModelUsers! tu retourne et donc un tableau de row qui en aucuns cas ne connais de fonction "getUrl".
En fait j ai l impression que le but était d'implémenter un objet par entrée dans ta BDD , Model devant être le conteneur et ModelUsers représentant un objet de ce conteneur (et donc pas une extension). Je penses que tu t'es un peu emmelé les pinceaux ^^
2 août 2016 à 17:48
2 août 2016 à 17:50