Modérateur PHPfrance |
2575 Messages
11 mai 2006, 16:58
Moi j'opte pour les 2 même si PHP5 ne peut tolérer la surcharge des fonctions et les multi-constructeurs.
Mais il existe une finte qui permet d'instaurer un modèle de multi-construction. Un exemple :
<?php
class personne{
//propriétés de la personne
private $id;
private $nom;
private $prenom;
//Base de données des personnes
private $liste;
//construction sans paramètres = objet vide
//construction avec paramètres = Nouvelle personne
function __construct($id=null, $nom=null, $prenom=null){
$this->id = $id;
$this->nom = $nom;
$this->prenom = $prenom;
}
//méthodes de manipulation de la base de données
//Ajout
function add($personne){
if (!$personne->id) $personne->id = count($this->liste); //Auto-incrément si id absent
$this->liste[$personne->id] = new personne(); //objet vide
$this->liste[$personne->id] = $personne;
}
//Consultation
function getById($id){
return $this->liste[$id];
}
//...
}
//Test de la classe
$base_personnes = new personne(); //objet personne servant comme base (objet vide)
$marc = new personne(null,"Dubois", "Marc"); //Nouvelle personne Marc Dubois
$pierre = new personne(null,"Leclerc", "Pierre"); //Nouvelle personne Pierre Leclerc
$aline = new personne(5,"Lemaire", "Aline"); //Nouvelle personne Aline Lemaire n°5
//les inscrire dans la base (Ajout)
$base_personnes->add($marc);
$base_personnes->add($pierre);
$base_personnes->add($aline);
$qui_suis_je = $base_personnes->getById(0); //? il s'agit tout simplement de Marc Dubois le 1° enregistré
//Découverte des objets
echo "<pre>";
echo "
La liste des personnes:
";
print_r($base_personnes);
echo "
Identité de Marc:
";
print_r($marc);
echo "
Identité de Pierre:
";
print_r($pierre);
echo "
Identité de Aline:
";
print_r($aline);
echo "
Qui est inscrit n° 0 ?
";
print_r($qui_suis_je);
echo "</pre>";
?>
--------
//////----
//---
//----
//////
-------
//---
//----
//---
//----
//---
//
------
//////----
//////-----
//////
-----
||--------
||--
||---
||
Prendre le recul n'est pas une perte de temps.
ps:
Affrontez moi dans l'arène