PHP5 its a kind of magic
Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le code $v = new voiture(); –le fichier obj/voiture.class.php sera automatiquement chargé
Constructeur / destructeur class voiture { public $marque; function __construct($marque) { $this->marque = $marque; } } $MaVoiture = new voiture('ferrari'); echo $MaVoiture->marque; // affiche ferrari De manière équivalente __destruct() regroupe toutes les actions à exécuter lors de la destruction dun objet
__call appelée automatiquement si l' on tente d'utiliser une méthode inexistante ne permet pas de gérer les appels statiques vers des méthodes inexistantes class MaClasse { function __call($name, $arguments) { echo 'Vous tentez d appeler la méthode.$name; } } $O = new MaClasse; echo $O -> coucou(); // affichera : Vous tentez d appeler la méthode coucou
__callStatic appelée automatiquement si l' on tente d'utiliser une méthode statique inexistante (depuis php5.3) class MaClasse { function __callStatic($name, $arguments) { echo 'Vous tentez d appeler la méthode.$name; } } MaClasse::coucou(); // affichera : Vous tentez d appeler la méthode coucou
__get appelé automatiquement si l'on tente d' utiliser un attribut inexistant class MaClasse { function __get($name) { echo 'Vous tentez d\'appeler l\attribut ', $name; } $O = new MaClasse; echo $O -> coucou; // affichera : Vous tentez d'appeler lattribut coucou
__set appelé automatiquement si l'on tente d'assigner une valeur à un attribut inexistant class MaClasse { function __set($name, $value) { echo 'Vous tentez d\'assigner ', $value, ' dans ', $name; } $O = new MaClasse; $O -> coucou = 'plouf'; // affichera : Vous tentez d assigner plouf dans coucou
__toString détermine comment la classe doit réagir lorsqu'elle est convertie en chaîne de caractères class MaClasse { function __toString() { return cet objet est un objet MaClasse; } $O = new MaClasse; echo $O; // affichera : cet objet est un objet MaClasse
__isset appelé pour déterminer si un attribut est défini class magicmethod { function __isset($variablename) { echo "Variable '".$variablename."' not Set"; } $a = new magicmethod(); isset($a->name); //affichera : Variable name not Set
__unset appelé pour effacer un attribut class magicmethod { function __unset($variablename) { echo "Variable '".$variablename."' not Set and Cannot be UnSet"; } $a = new magicmethod(); unset($a->name); //affichera: Variable name not Set and Cannot be UnSet
__sleep appelé lors de la sérialisation dun objet class magicmethod { private $setName; function __sleep() { echo "Performing Operation Before Serializing Data "; return array(setName); } $a = new magicmethod(); $a->setName = "Hello World!!!"; $serializedata = serialize($a); //affichera: Performing Operation Before Serializing Data
__wakeup appelé lors de la déssérialisation dun objet class magicmethod { private $setName; function __wakeup() { echo "Performing Operation Before Unserializing Data "; echo $this->setName; } $a = new magicmethod(); $a->setName = "Hello World!!!"; $serializedata = serialize($a); $serializedata1 = unserialize($serializedata); //affichera: Performing Operation Before Unserializing Data //Hello World !!
__clone appelé lors du clonage dun objet class Animal { public $legs; public $name; function __clone() { echo "Object Cloning in Progress"; } $tiger = new Animal(); $tiger->name = "Tiger"; $tiger->legs = 4; $kangaroo = clone $tiger; $kangaroo->name = "Kangaroo"; $kangaroo->legs = 2; //affichera: Object Cloning in Progress
class Singleton { function &getInstance() { static $instance; if(!$instance) { $instance = newSingleton(); } return $instance; } $obj = & singleton::getInstance(); Singleton en PHP 4 La classe est toujours instanciable
Singleton en PHP 5 class Singleton { static private $instance; private function __construct(){} public static function getInstance() { if (null === self::$instance)) { self::$instance = new self(); } return self::$instance; } final public function __clone() { trigger_error('Le clônage n\'est pas autorisé.', E_USER_ERROR); } } $obj = Singleton::getInstance(); Ne pas oublier la méthode __clone()
Singleton en PHP 5.3 part I abstract class Singleton { private static $instances = array(); final private function __construct() { if(isset(self::$instances[get_called_class()])) { Throw new Exception('instance of '.get_called_class().' already exists'); } static::initialize(); } Protected function intialize(){}
Singleton en PHP 5.3 part II final publicstatic function getInstance() { $class = get_called_class(); if(!isset(self::$instances[$class])) { self::$instances[$class] = new static(); } return self::$instances[$class]; } final private function __clone(){} }