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   -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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   Statut Membre Dernière intervention   1
 
Ca fonctionne ! Merci beaucoup j'ai pas pensé au getters...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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   Statut Membre Dernière intervention   1
 
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