creation d'un objet basique

Eléphanteau du PHP | 16 Messages

02 avr. 2008, 15:29

Bonjour a tous, je me met depuis très (très) peu à php5 car à ce que j'entends c'est vraiment mieux :)
J'ai essayé de créer un objet le plus basic possible -> un menu tout simple. J'ai essayé de suivre la méthode que j'ai vu dans plusieurs tuto mais la logique est encore un peu confuse pour moi.

Le souci c'est que ben rien ne s'affiche à l'écran :oops: . J'ai entendu parler de la méthode __toString () pour l'affichage mais je pense pas encore savoir l'utiliser correctement. Merci d'éclairer ma lanterne :roll:
<?php
class menu
{

	//definition des attributs
	public $css = "menu.css";
	private $menuBuffer = array();
	
	//constructeur
	public function __construct(){
	
	}
	
	//methodes
	public function openMenu($css)
	{
	$this->menuBuffer['open'] = '<ul class='.$css.'>';
	}
	
	public function closeMenu()
	{
	$this->menuBuffer['close'] = '</ul>';
	}
	
	public function addLink($link,$label)
	{
	$tmpelem = '<li><a href='.$link.'>'.$label.'</a></li>';
	$this->menuBuffer['element'] = $tmpelem;
	}
	
}//fin de la class	
	
	//Construction du menu
	$menu = new menu();
	$menu->openMenu($css);
	$menu->addLink("accueil.php","accueil");
	$menu->closeMenu();
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 avr. 2008, 15:58

Peut être qu'avec un echo quelque part, ton script aurait plus de chance d'afficher quelque chose ? ;)

Tu peux créer une méthode pour le faire :
echo $this->menuBuffer['open'];
echo $this->menuBuffer['element'];
echo $this->menuBuffer['close'];
Ou bien simplement afficher les attributs à partir de ton instance $menu, ou autre... :)

Par ailleurs, c'est pas clair du tout ce que tu fais avec ta variable $css... Lorsque tu fais "$menu->openMenu($css)" elle n'est pas définie, l'attribut css de l'objet est un nom de fichier et dans la méthode openMenu() ca semble être un nom de classe... à mon avis y a des choses à revoir de ce côté là :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 16 Messages

02 avr. 2008, 16:26

Merci de ta réponse.
Par ailleurs, c'est pas clair du tout ce que tu fais avec ta variable $css...
Euh c'est pas faux ^^. Si j'ai bien compris la variable est déclarer comme public donc je peux la laisser dans la définitions des attributs elle sera quand même accessible pour le reste de la class.
tu peux créer une méthode pour le faire :
	public function affichage(){
	echo $this->openMenu();
	echo $this->addLink("accueil.php","accueil");
	echo $this->closeMenu();
	}

	//Construction du menu
	$menu = new menu();
	$menu->affichage();
J'ai bon ? Parce que j'ai toujours pas d'affichage :-k . Le problème peux venir d'ailleurs ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 avr. 2008, 17:04

Ta méthode affiche() affiche le résultat des différentes méthodes appellées, mais aucune d'elle ne retourne de résultat, du coup, en dépit du echo, rien n'apparait.

$this->openMenu() va renseigner l'attribut $this->menuBuffer (plus précisément son index 'open'). C'est lui qu'il faut faire afficher :)

De même pour les autres...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...