Suite au post de Megadeth (post306906.html#p306906)
et ayant été un peu trop loin dans la démo je poste ici mon 'tit travail lol
Si ca plait dites le... Si ca plait pas...
S'entend, livré ainsi je doute que ca puisse servir à tous mais adapté je pense que oui.
Oups, j'oubliais: Les commentaires sont quelques fois étranges mais je code avec Edit.com, le charset
est différent. Merci d'être indulgent à ce propos lol
<?php
/**
* Nom : IdClass
*
* Dependance : none
*/
abstract class idClass
{
/**
* Tableau des id mode static & prot‚g‚
*
* @var array
*/
protected static $_arrayId = Array();
/**
* Permet de savoir si l'id donn‚ en argument existe d‚ja
*
* @value : string
* @return : bool
*/
protected function isIdExiste($strId)
{
return isset(self::$_arrayId[$strId]) ? true : false;
}
}
/**
* Nom : Personne
*
* Dependence : Class parente
*/
class Personne extends idClass
{
/**
* Id de la personne concern‚, mode priv‚
*
* @var array
*/
private $_id = "";
/**
* Commentaire pour cette personne
*
* @var string
*/
private $_comment = "";
/**
* Constructeur
*
* Assigne l'id par l'argument
*
* @value : string
* @return : none
*/
public function __construct($strId)
{
/**
* Si l'argument est invalide on sort
*/
if (!is_string($strId)) die("Argument attendu de type chaine !");
/**
* Si l'id existe deja alors on sort
*/
if ($this -> isIdExiste($strId)) die("ID deja reference !");
/**
* On enregistre
*/
$this -> _id = $strId;
}
/**
* Assigne un commentaire … la variable
*
* Si $bfErase est … vrai alors le message suppl‚mentaire
* sera s‚par‚ du pr‚c‚dent par un retour chariot.
*
* @value : string, commentaire … copier
* @value : [bool] flag d'‚criture
* @return : bool
*/
public function setComment($string, $bfErase = false)
{
/**
* Test les l'arguments
*/
if (!is_string($string)) die("Argument attendu de type chaine !");
if (!is_bool($bfErase)) die("Argument attendu de type boolean !");
if ($bfErase) $this -> _comment = $string;
else $this -> _comment .= ($this -> _comment == "") ? $string : "\n".$string;
return true;
}
/**
* Renvoie la variable ID de l'objet
*
* @value : none
* @return : string
*/
public function getId()
{
return $this -> _id;
}
}
/**
* Nom : Bus
*
* Dependence : none
*/
class Bus
{
/**
* Numero du bus si besoin
*
* @var integer
*/
protected $_iNumero = "0";
/**
* Tableau des personnes dans le bus
*
* @var integer
*/
protected $_voyager = Array();
/**
* Nombre de places maximum, par d‚faut 23
*
* @var integer
*/
protected $_iCountMax = 23;
/**
* Constructeur
*
* D‚truit certaine des variables de class
*
* @value : none
* @return : bool
*/
protected function __construct()
{
unset($this -> _iNumero);
unset($this -> _voyager);
}
/**
* Rend le clonage impossible
*
* @value : none
* @return : none
*/
private function __clone()
{
}
/**
* Permet d'assigner un numero au bus
*
* Un meme numero peut etre present...
*
* @value : integer
* @return : bool
*/
function setNumero($iNumero)
{
if (!is_numeric($iNumero)) die("L'argument attendu est de type integer !");
$this -> _iNumero = $iNumero;
}
/**
* Trouve dans le tableau des voyageurs un espace vide
* entre deux clef d'index et la retourne.
*
* Peut, si le bus est complˆt, renvoyer false
*
* @value : none
* @return : integer
*/
function getFreeSpace()
{
/**
* Variable temporaire du nombre de voyageur inscrits
*
* @var integer
*/
$iCount = count($this -> _voyager);
/**
* Si le bus est bond‚ alors on sort
*/
if ($iCount >= $this -> _iCountMax) die("Depassement de capacite du bus !");
/**
* Flag de v‚rification
*
* @var boolean
*/
$bfWork = true;
/**
* Variable temporaire de compteur de place
*
* @var integer
*/
$iCounter = 0;
/**
* Boucle sur le tableau afin de r‚cup‚rer un clef disponible
*
* @var integer
*/
while($bfWork)
{
/**
* Si l'index n'existe pas alors on l'enregistre et
* on marque le flag comme faux
*/
if (!isset($this -> _voyager[$iCounter])) $bfWork = false;
else $iCounter++;
}
/**
* Renvoie l'index disponible
*/
return $iCounter;
}
/**
* Ajoute un voyageur dans le bus
*
* Si le bus est complˆt alors il retourne false
*
* @value : objet Personne
* @return : bool
*/
public function addUsager(Personne $objPersonne)
{
$mixed = $this -> getFreeSpace();
if ($mixed === false) return false;
/**
* Variable temporaire de l'id
*
* @var string
*/
$strId = $objPersonne -> getId();
/**
* Variable temporaire de l'id
*
* @var string
*/
$bfFound = false;
/**
* Si le tableau existe on poursuit sinon on saute le test
*/
if (is_array($this -> _voyager))
{
/**
* Boucle sur les ‚l‚ments du tableau
*/
foreach($this -> _voyager AS $objValue)
{
/**
* Si concordence on marque le flag et on sort de la boucle
*/
if ($strId == $objValue -> getId())
{
$bfFound = true;
break;
}
}
}
/**
* Si le fag est vrai alors on sort
*/
if ($bfFound) die("Voyageur deja present !");
/**
* Assignation de l'objet
*/
$this -> _voyager[$mixed] = $objPersonne;
/**
* R‚ussite de l'insertion
*/
return true;
}
/**
* Renvoie l'instance du voyageur not‚ par son id
*
* @value : string
* @return : instance ou false si l'id n'est pas r‚f‚renc‚
*/
public function getInstance($strId)
{
/**
* Si l'argument est invalide alors on sort
*/
if (!is_string($strId)) die("L'argument attendu est de type chaine !");
/**
* Variable temporaire pour l'instance a trouver
*
* @var, instance
*/
$inst = NULL;
/**
* Si le tableau n'existe, pas d'instance donc on renvoie faux
*/
if (!is_array($this -> _voyager)) return false;
/**
* Boucle sur les ‚l‚ments du tableau
*/
foreach($this -> _voyager AS $objValue)
{
/**
* Si concordence on marque le flag et on sort de la boucle
*/
if ($strId == $objValue -> getId())
{
$bfFound = true;
$inst = $objValue;
break;
}
}
/**
* Si le fag est vrai alors on sort
*/
if ($bfFound) return $inst;
/**
* Echec de la fonction, faux renvoy‚
*/
return true;
}
/**
* Supprime un voyageur du bus
*
* Si r‚ussite de la fonction renvoie vrai sinon faux
*
* @value : mixed, ID ou objet Personne
* @return : bool
*/
public function delUsager($mixed)
{
/**
* Si l'argument est invalide alors on sort
*/
if (!$mixed instanceof Personne && !is_string($mixed)) die("Argument invalide !");
/**
* Variable temporaire de l'id
*
* @var string
*/
$strId = "";
/**
* Attribution de la chaine ID pour recherche
*/
if (is_string($mixed)) $strId = $mixed;
else $strId = $objPersonne -> getId();
/**
* Variable temporaire de l'id
*
* @var string
*/
$bfFound = false;
/**
* Si le tableau n'existe on sort en revoyant false
*/
if (!is_array($this -> _voyager)) die("Aucun voyageur present, suppression impossible !");
/**
* Boucle sur les ‚l‚ments du tableau
*/
foreach($this -> _voyager AS $key => $objValue)
{
/**
* Si concordence, alors :
*
* on marque le drapeau de recherche
* on d‚truit la clef correspondante
* on sort de la boucle
*/
if ($strId == $objValue -> getId())
{
$bfFound = true;
unset($this -> _voyager[$key]);
break;
}
}
/**
* R‚ussite de la fonction on renvoit vrai
*/
if ($bfFound) return true;
/**
* Echec de la fonction, on sort
*/
if (!$bfFound) die("Le Voyageur n'etait pas reference dans le bus !");
}
}
/**
* Nom : Transport
*
* Dependence : Class parente
*/
class Transport extends Bus
{
/**
* Tableau des diff‚rents bus
*
* @var Instance, priv‚e, static
*/
private static $_instance = NULL;
/**
* Tableau des diff‚rents bus
*
* @var Array, prot‚g‚
*/
private $_arrayBus = array();
/**
* Constructeur
*
* Son status de prot‚g‚ permet le pattern singleton
*
* Force l'envoi ver le parent
*/
protected function __construct()
{
/**
* Force le constructeur parent
*/
parent::__construct();
/**
* D‚truit la variable de class parent
*/
unset($this -> _iCountMax);
}
/**
* Initialise l'objet si celui-ci n'existe pas encore
*
* L'appel se fait de maniŠre static
* Renvoie une instance soit de l'objet global soit d'un bus
* voir l'argument.
*
* value : [string], destination du bus
* return : instance du bus
*/
public static function init($strDest = false)
{
/**
* Si la class n'est pas instanci‚e on le fait
*/
if (!isset(self::$_instance)) self::$_instance = new self();
$inst = self::$_instance;
/**
* Si aucune autre demande on sort
*/
if ($strDest === false) return true;
/**
* Si l'argument est invalide alors on sort
*/
if (!is_string($strDest)) die("L'argument attendu est de type chaine !");
/**
* Si la destination existe d‚ja on sort
*/
if (isset($inst -> _arrayBus[$strDest])) die("Destination deja reference !");
/**
* On assigne l'objet au tableau
*/
$inst -> _arrayBus[$strDest] = new parent();
/**
* L'instance du bus est retourn‚e
*/
return $inst -> _arrayBus[$strDest];
}
/**
* Retourne l'instance du bus correspondant a l'argument
*
* Si aucune r‚f‚rence a ce nom alors false est retourn‚
*
* @value : string, id du bus
* @return : instance concern‚e
*/
public static function getBus($strId)
{
/**
* Si l'argument est invalide alors on sort
*/
if (!is_string($strId)) die("L'argument attendu est de type chaine !");
/**
* Variable temporaire pour l'instance de class
*
* @var, instance
*/
$inst = self::$_instance;
/**
* Si aucune r‚f‚rence … ce nom alors on sort
*/
if (!isset($inst -> _arrayBus[$strId])) return false;
/**
* Au contraire renvoie son instance
*/
return $inst -> _arrayBus[$strId];
}
}
?>
L'usage en est le suivant:<?php
$global = Transport::init();
$paris = Transport::init("Paris");
$orleans = Transport::init("Orleans");
$paris -> addUsager(new Personne("A-123"));
$orleans -> addUsager(new Personne("Z-123"));
$paris -> addUsager(new Personne("A-325"));
$paris -> addUsager(new Personne("A-117"));
$pers = new Personne("TOTO");
$paris -> addUsager($pers);
$pers -> setComment("Prefere la fenetre");
$obj = $paris -> getInstance("A-325");
$obj -> setComment("Gros fumeur");
print_r(Transport::getBus("Paris"));
print_r(Transport::getBus("Orleans"));
?>
Libre à vous de l'utiliser, la modifer etc... Soyez juste cool en me le disant.@+ bon code all
EDIT: Après re-lecture je suis embété lol Le script est carrément indigeste.
Donc, désolé pour le tas, j'ai pas trop fais gaffe au moment du cop/col et bravo pour les plus courageux