PHP5 apporte à PHP les fondements de la programmation objet. PHP5 apporte un certain nombre de méthodes utilisables dans les Objets afin d’automatiser certaines taches, ou intercepter des appels à des méthodes / propriétés inexistantes… D’un point de vue architecture c’est une mauvaise pratique que de se baser sur ces méthodes, ca reste dans certains cas d’exceptions, très pratique
Liste des méthodes « magiques » en PHP5 :
- __construct()
- __destruct()
- __set()
- __get()
- __call()
- __toString()
- __sleep()
- __wakeup()
- __isset()
- __unset()
- __autoload()
- __clone()
__construct()
Cette méthode est appelée lors de la construction d’un objet.
__destruct()
Cette méthode est appelée lors de la destruction d’un objet.
__set()
Cette méthode est appelée automatiquement lors de l’assignation d’une valeur à un attribut inexistant.
__get()
Cette méthode est appelée automatiquement lors de la lecture d’une valeur à un attribut inexistant.
__call()
Cette méthode est appelée automatiquement lors de l’appel à une méthode inexistante.
__toString()
Cette méthode est appelée lors de la tentative d’interprétation d’un objet en String. (via un echo ou print…)
__sleep()
Cette méthode sert à la sérialisation d’un objet en PHP5. Elle doit définir la façon dont PHP doit le sérialiser.
__wakeup()
Cette méthode doit définir la dé-sérialisation d’un objet en PHP5.
__isset()
Cette méthode est utilisée lors de la vérification de l’existence d’un attribut via un appel à la méthode « isset »..
__unset()
Méthode appelée lors de la destruction de l’objet.
__autoload()
Cette méthode est appelée lorsque vous essayez de charger un objet dans un fichier séparé sans l’avoir précédemment chargé via un include, include_once, require ou require_once.
__clone()
cette méthode définie la façon de cloner un objet.
Exemple :
adminEmail = 'toto@toto.fr';
?>
Ceci résulte dans la sortie suivante :
La propriétée : adminEmail - Valeur : toto@toto.fr
Ce n’est pas une bonne pratique !
En effet, à part dans des cas isolés, il est fortement recommendé de definir clairement vos bean, avec des propriétées, des setters et des getters.
La bonne pratique voudrait :
adminEmail = $var;
}
public function getAdminEmail() {
return $this->adminEmail;
}
}
$systemvars = new MyClass();
$systemvars->setAdminEmail ('toto@toto.fr');
?>
Il est important pour la pérennité du code de respecter les bonnes pratiques, mais parfois, il faut être flexible, voila l’idée de cet article.
N’oubliez pas de pré-citer __callStatic qui arrive avec PHP5.3 😉
et le _useJavaInsteadOfPhp() ?
C’est vrai que développer en objet (lorsqu’on débute) est bien plus long que de se la jouer à la old school, mais le travail est pérenne et si comme tu le dis on respecte un certain nombre de bonnes pratiques, on obtient un code réutilisable, là où à l’époque on devait sans cesse redéfinir les mêmes fonctions ou se faire des fichiers regroupant nos fonctions sans une vraie bonne organisation autour d’un objet.