La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.

Présentations similaires


Présentation au sujet: "PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le."— Transcription de la présentation:

1 PHP5 its a kind of magic

2 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é

3 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

4 __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

5 __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

6 __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

7 __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

8 __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

9 __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

10 __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

11 __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

12 __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 !!

13 __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

14 get_called_class() <?php class foo { static public function test() { var_dump(get_called_class()); } } class bar extends foo {} foo::test(); //foo bar::test(); //bar

15 class Singleton { function &getInstance() { static $instance; if(!$instance) { $instance = new Singleton(); } return $instance; } $obj = & singleton::getInstance(); Singleton en PHP 4 La classe est toujours instanciable

16 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()

17 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'); } self::initialize(); } Protected function intialize(){}

18 Singleton en PHP 5.3 part II final public static function getInstance() { $class = get_called_class(); if(!isset(self::$instances[$class])) { self::$instances[$class] = new static(); } return self::$instances[$class]; } final private function __clone(){} }

19 Utilisation de la classe singleton Class Foo extends Singleton {} Class Bar extends Singleton {} $a = Foo::getInstance(); $b = Foo::getInstance();

20 Les dépendances dinjection contre-exemple Cest une IoC, inversion de contrôle http://fabien.potencier.org/article/11/what-is-dependency-injection Class User { protected $storage; function __construct() { $this->storage = new SessionStorage(); } function setLanguage($language) { $this->storage->set(language } $user = new User(); Difficile de changer la classe de stockage Simple à utiliser

21 Les dépendances dinjection exemple Class User { protected $storage; function __construct($storage) { $this->storage = $storage; } $storage = new SessionStorage $user = new User($storage); Très simple à personnaliser Légèrement plus compliqué à utiliser

22 design Patterns en PHP 5.3 http://www.slideshare.net/fabpot/design- patternrevisitedphp53 Slide 7 Singleton Slide 13 Active Record Slide 20 The Obesrever Pattern Slide 42 Template view Slide 46 Dependecy Injection Slide 80 Anonymous Functions / Closures … #mustread http://fr.wikipedia.org/wiki/Antipattern ;)


Télécharger ppt "PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le."

Présentations similaires


Annonces Google