Fatal error

Résolu/Fermé
stampia02 Messages postés 95 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 - 24 mars 2017 à 00:43
stampia02 Messages postés 95 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 - 26 mars 2017 à 11:34
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

<?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

jordane45 Messages postés 38215 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 678
25 mars 2017 à 23:10
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.


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>';
} ?>

1
stampia02 Messages postés 95 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 1
26 mars 2017 à 11:34
Ca fonctionne ! Merci beaucoup j'ai pas pensé au getters...
0
jordane45 Messages postés 38215 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 678
24 mars 2017 à 00:56
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 :

<?php 
foreach($tabLivres as $livre) { 
 echo '<tr>
        <td><span class="html">'.$livre->titre.'</span></td>
        <td>'.$livre->auteur.'</td>		
       </tr>';
} ?>





0
stampia02 Messages postés 95 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 1
24 mars 2017 à 22:06
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;
	}
0