Voilà, je débute dans l'objet PHP (j'ai fais de l'objet en Java / C#, et du PHP pointeur, mais pas d'objet PHP) et j'ai quelques difficultés à m'adapter
Alors voilà ce que j'essaye de faire :
J'ai des classes d'objets, et une classe qui gérera des "collections" d'objets sous forme de tableau.
class Collection implements Iterator
{
private $var = array();
public function __construct($array = "") {
if (is_array($array))
$this->var = $array;
}
public function add($object) {
$this->var[count($this->var)] = $object;
}
...
}
class Categorie
{
private $id;
private $libelle;
private $menu;
private $id_parent;
function Categorie ($id, $libelle, $menu, $id_p)
{
$this->id = $id;
$this->libelle = $libelle;
$this->menu = $menu;
$this->id_parent = $id_p;
}
public function __get ($property)
{
if (array_key_exists ($property, get_class_vars(__CLASS__)))
return $this->$property;
else
die($property." est introuvable. Affichage impossible.");
}
public function __set ($property, $value)
{
if (array_key_exists ($property, get_class_vars(__CLASS__)))
$this->$property = $value;
else
die($property." est introuvable. Mise à jour impossible.");
}
public function show ()
{
echo $this->id." / ".$this->libelle." / ".$this->menu." / ".$this->id_parent;
}
...
}
J'ai aussi une classe qui gère ma connexion à la BDDclass Connexion {
private $connexion;
private $bdd;
private $host;
private $user;
private $mdp;
function Connexion ($host = NULL, $user = NULL, $mdp = NULL, $bdd = NULL)
{
$this->host = $host;
$this->user = $user;
$this->mdp = $mdp;
$this->bdd = $bdd;
}
public function open ()
{
$this->connexion = mysql_connect($this->host, $this->user, $this->mdp) or die ("Impossible de se connecter au serveur : " . mysql_error());
$this->select_db();
return true;
}
...
}
Ainsi des classes DAO pour chaque objet : (question : on ne peut pas utiliser de template en PHP vu que faiblement typé ?)class CategorieDAO
{
private $connexion;
function CategorieDAO()
{
if (isset ($_SESSION['c']))
$this->connexion = $_SESSION['c'];
else
die ("Vous n'etes pas connectes a la BDD.");
}
public function GetMenu()
{
$this->connexion->open();
$query = "SELECT * FROM `Categories` WHERE id_categorie = id_parent;";
$result = $this->connexion->exec($query);
$collec = new Collection ();
while ($row = $this->connexion->fetch($result))
{
$cat = new Categorie ($row[0], $row[1], $row[2], $row[3]);
$collec->add($cat);
}
$this->connexion->close();
return $collec;
}
...
}
Et ma page index où j'essaye de manipuler un peu tout ça pour mieux controler et comprendre le fonctionnement :$c = new Connexion ($HOST, $USER, $PASS, $DB);
$_SESSION['c'] = $c;
$categories= new CategorieDAO();
$menus = $categories->GetMenu();
Jusque là, aucun problème !Par contre, lorsque je souhaite afficher mes objets "Categorie" dans ma collection $menus avec la fonction show() ... ca plante :
$menus->rewind();
do
{
echo $menus->current->show();
echo "<br/>";
} while ($menus->next());
L'erreur :
Code : Tout sélectionner
Fatal error: Call to a member function show() on a non-object in /homez.420/latiendan/www/recette/index.php on line 30Code : Tout sélectionner
Collection Object
(
[var:private] => Array
(
[0] => Categorie Object
(
[id:private] => 1
[libelle:private] => Chicky Robes
[menu:private] => 1
[id_parent:private] => 1
)
[1] => Categorie Object
(
[id:private] => 2
[libelle:private] => Prêt à porter
[menu:private] => 2
[id_parent:private] => 2
)
...
Merci beaucoup d'avance !
Dorian