!!!Attributs ou méthodes qui n’existent pas ? Avant de faire un petit récapitulatif magique ou déjà défini (mouahaha), voyons une petite notion importante du PHP objet : il est possible de modifier et de lire la valeur d’un attribut qui n’existe pas (ah horreur), par contre, on ne peut utiliser une méthode qui n’existe pas (ah bah ça tombe bien alors !). Je m’explique en codant : /// class Chat { } $unChat = new Chat(); $unChat->couleur = ‘noir’; $unChat->etat = ‘griffes sorti’; echo ‘Mon chat ‘.$unChat->couleur.’ a ses ‘.$unChat->etat.’.'; /// Eh oui, ce petit exemple affichera bien : « Mon chat noir a ses griffes sorti. ». C’est horrible, n’est-ce-pas ? Heureusement avec @@__set()@@ et @@__get()@@, on va pouvoir empêcher ce types d’actions et en profiter pour vérifier le type des valeurs que l’on assigne à nos attributs. Par contre : /// class Chat { } $unChat = new Chat(); $unChat->etreGentils(); /// Nous renverra une jolie petite erreur ! (heu, oui, je n’aime pas tellement les chats. Enfin, cela dit, je n’ai rien contre eux non plus) Heureusement la méthode magique @@__call()@@ va nous permettre de rattraper ce petit bémol. Mais tout cela est très bien expliqué sur [Apprendre PHP|http://www.apprendre-php.com/tutoriels/categorie-6-1-la-programmation-orientee-objet-poo.html], alors sans plus tarder voilà une liste des méthodes et des constantes magiques, ainsi que des fonctions prédéfinies avec à chaque fois une explique, ou des exemples tiré du manuel PHP, de tutoriels sur le Web ou de mes propres mot. !!!Méthodes magiques Plus d’informations dans le [Manuel PHP|http://fr3.php.net/manual/fr/language.oop5.magic.php] (liste tirée de Developpez.com et modifiée, voir agrémentée, par mes soins) *@@__construct()@@ : Appelée lorsqu’on tente de construire la class *@@__destruct()@@ : Appelée lorsqu’on tente de détruire la class *@@__set()@@ : Déclenchée lors de l’accès en écriture à une propriété de l’objet. [Exemple d'utilisation|http://www.apprendre-php.com/tutoriels/tutoriel-49-methodes-magiques-set-et-get.html] *@@__get()@@ : Déclenchée lors de l’accès en lecture à une propriété de l’objet. [Exemple d'utilisation|http://www.apprendre-php.com/tutoriels/tutoriel-49-methodes-magiques-set-et-get.html] *@@__call()@@ : Déclenchée lors de l’appel d’une méthode inexistante de la classe (appel non static). [Exemple d'utilisation|http://www.apprendre-php.com/tutoriels/tutoriel-48-methodes-magiques-call.html] *@@__callstatic()@@ : Déclenchée lors de l’appel d’une méthode inexistante de la classe (appel static) : disponible depuis PHP 5.3 et 6.0 *@@__isset()@@ : Déclenchée si on applique @@isset()@@ à une propriété de l’objet
*@@__unset()@@ : Déclenchée si on applique @@unset()@@ à une propriété de l’objet -> différence avec @@__destruct()@@ ? *@@__sleep()@@ : Exécutée si la fonction @@serialize()@@ est appliquée à l’objet. [Exemple d'utilisation|http://www.apprendre-php.com/tutoriels/tutoriel-75-methodes-magiques-sleep-et-wakeup.html] *@@__wakeup()@@ : Exécutée si la fonction @@unserialize()@@ est appliquée à l’objet. [Exemple d'utilisation|http://www.apprendre-php.com/tutoriels/tutoriel-75-methodes-magiques-sleep-et-wakeup.html] *@@__toString()@@ : Appelée lorsque l’on essaie d’afficher directement l’objet : @@echo $object;@@ *@@__set_state()@@ : Méthode static lancée lorsque l’on applique la fonction @@var_export()@@ à l’objet *@@__clone()@@ : Appelé lorsque l’on essaie de cloner l’objet. [Exemple d'utilisation|http://www.apprendre-php.com/tutoriels/tutoriel-74-methodes-magiques-clone.html] *@@__autoload()@@ : Cette fonction n’est pas une méthode, elle est déclarée dans le scope global et permet d’automatiser les « include/require » de classes PHP !!!Constantes magiques Plus d’informations dans le [Manuel PHP|http://fr3.php.net/manual/fr/language.constants.predefined.php] (je n’ai rien ajouté, ça me paraissait clair) * @@\__CLASS__@@ Le nom de la classe courante. (Ajouté en PHP 4.3.0) Depuis PHP 5, cette constante retourne le nom de la classe comme il a été déclaré (sensible à la casse). En PHP 4, cette valeur est toujours en minuscule. * @@\__METHOD__@@ Le nom de la méthode courante. (Ajouté en PHP 5.0.0) Le nom de la méthode est retourné comme il a été déclaré (sensible à la casse). * @@\__NAMESPACE__@@ Le nom de l’espace de noms courant (sensible à la casse). Cette constante est définie au moment de la compilation (Ajouté en PHP 5.3.0). * @@\__LINE__@@ La ligne courante dans le fichier. * @@\__FILE__@@ Le chemin complet et le nom du fichier courant. Si utilisé pour une inclusion, le nom du fichier inclus est retourné. Depuis PHP 4.0.2, @@\__FILE__@@ contient toujours le chemin absolu pour les liens symboliques alors que les anciennes versions contenaient le chemin relatif, dans certaines circonstances. * @@\__DIR__@@ Le dossier du fichier. Si utilisé dans une inclusion, le dossier du fichier inclus sera retourné. C’est l’équivalent de dirname(@@\__FILE__@@). Ce nom de dossier ne contiendra pas de slash final, sauf si c’est le dossier racine. (Ajouté en PHP 5.3.0.) * @@\__FUNCTION__@@ Le nom de la fonction. (Ajouté en PHP 4.3.0) Depuis PHP 5, cette constante retourne le nom de la fonction comme il a été déclaré (sensible à la casse). En PHP 4, cette valeur est toujours en minuscule. !!!Méthodes prédéfinies Plus d’informations dans le [Manuel PHP|http://fr3.php.net/manual/fr/ref.classobj.php] (je n’ai presque rien ajouté, ça me paraissait clair) * @@class_alias@@ : Créé un alias de la classe * @@class_exists@@ : Vérifie que la classe a été définie * @@get_called_class@@ : Le nom de la classe en « Late Static Binding », c’est la class courante * @@get_class_methods@@ : Retourne les noms des méthodes de la classe * @@get_class_vars@@ : Retourne les valeurs par défaut des attributs de la classe * @@get_class@@ : Retourne la classe de l’objet * @@get_declared_classes@@ : Liste toutes les classes prédéfinies dans PHP * @@get_declared_interfaces@@ : Retourne un tableau avec toutes les interfaces déclarées * @@get_object_vars@@ : Retourne les propriétés de l’objet * @@get_parent_class@@ : Retourne le nom de la classe de l’objet * @@interface_exists@@ : Vérifie si l’interface a été définie * @@is_a@@ : Vérifie si l’objet fait parti de la classe ou a cette classe comme parents * @@is_subclass_of@@ : Détermine si l’objet est une sous-classe * @@method_exists@@ : Vérifie que la méthode existe pour la classe * @@property_exists@@ : Vérifie si un l’objet ou la classe possède un attribut