Fatal error
Résolu
stampia02
Messages postés
95
Date d'inscription
Statut
Membre
Dernière intervention
-
stampia02 Messages postés 95 Date d'inscription Statut Membre Dernière intervention -
stampia02 Messages postés 95 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un petit soucis, je débute en php et je n'arrive pas a voir ou est le problème
j'ai le message "Fatal error: Call to undefined method Livre::titre()" à la ligne 3
Merci
J'ai un petit soucis, je débute en php et je n'arrive pas a voir ou est le problème
j'ai le message "Fatal error: Call to undefined method Livre::titre()" à la ligne 3
Merci
<?php for ($i=0;$i<count($tabLivres);$i++) { ?> <tr> <td><span class="html"><?php echo $tabLivres[$i]->titre() ?></span></td> <td><?php echo $tabLivres[$i]->auteur() ?></td> </tr> <?php } ?>
2 réponses
Donc ce sont les attributs de ta class Livre ..
qui sont en PRIVATE ...
Il te faut un getter pour les récupérer dans ce cas.
qui sont en PRIVATE ...
Il te faut un getter pour les récupérer dans ce cas.
class Livre{ private $_no; private $_titre; private $_auteur; public function __construct($no, $titre, $auteur){ $this->_no = $no; $this->_titre = $titre; $this->_auteur = $auteur; } public function get_titre(){ return $this->_titre; } public function get_auteur(){ return $this->_auteur; } //fin de la class }
<?php foreach($tabLivres as $livre) { echo '<tr> <td><span class="html">'.$livre->get_titre().'</span></td> <td>'.$livre->get_auteur().'</td> </tr>'; } ?>
stampia02
Messages postés
95
Date d'inscription
Statut
Membre
Dernière intervention
1
Ca fonctionne ! Merci beaucoup j'ai pas pensé au getters...
Bonjour,
Que contient ta variable $tabLivres ?
Comment est-elle initialisée (quelles lignes de code...) ?
auteur et livre.. sont sensés être des "propriétés" (des attributs ou des noms de colonnes..) ou une "méthodes" (une fonction..) ??
Si c'est, comme je le pense, des nom de colonne d'une base de données.. il ne faut pas mettre les parenthèses.....
De plus.. un foreach serait plus "beau".
Evite également d'ouvrir/fermer des balises php partout ...
Tu peux, par exemple, faire comme ceci :
Que contient ta variable $tabLivres ?
Comment est-elle initialisée (quelles lignes de code...) ?
auteur et livre.. sont sensés être des "propriétés" (des attributs ou des noms de colonnes..) ou une "méthodes" (une fonction..) ??
Si c'est, comme je le pense, des nom de colonne d'une base de données.. il ne faut pas mettre les parenthèses.....
De plus.. un foreach serait plus "beau".
Evite également d'ouvrir/fermer des balises php partout ...
Tu peux, par exemple, faire comme ceci :
<?php foreach($tabLivres as $livre) { echo '<tr> <td><span class="html">'.$livre->titre.'</span></td> <td>'.$livre->auteur.'</td> </tr>'; } ?>
Voici le reste de mon code
public function select_livres(){ require_once(MODEL . 'Livre.php'); $query = 'SELECT * FROM livres ORDER BY no DESC'; //select dans la table des livres $result = $this->_db->query($query); $tableau = array(); if ($result->rowcount() != 0 ){ while($row = $result->fetch()){ $tableau[] = new Livre($row->no,$row->titre,$row->auteur); //attribue a chaque colonnes les attribut de la classe Livre } } var_dump($tableau); return $tableau; }
public function run(){ require_once(MODEL . 'Db.php'); $tabLivres=''; $tabLivres=Db::getInstance()->select_livres(); require_once(VUES . 'livres.php'); }
class Livre{ private $_no; private $_titre; private $_auteur; public function __construct($no, $titre, $auteur){ $this->_no = $no; $this->_titre = $titre; $this->_auteur = $auteur; }