Skip to content

Les méthodes magiques

Elles permettent entre autre de définir le polymorphisme. Il existe différents types de méthodes magiques travaillat sur les propriétés et methodes et d’autres sur l’objet

__toString()

__toString est appelé a chaque fois que l’objet est convertit en chaine de caractere.

__call()

__call permet de simuler une methode afin de simuler des erreurs d’appels de méthodes non existentes à l’objet

public function __call($nomMethode,$parametres){
	// Traitement sur une méthode non existente
}

__set()

__set permet de rattrapper l’erreur qui modifierait une propriété non-existente

public function __set($nomPropriete,$valeur){
	echo "Vous essayer de modifier $nomPropriete avec la valeur $valeur."
}

__get()

__get permet de rattrapper l’erreur qui essayerait d’acceder à une propriété non existente

public function __get($nomPropriete){
	echo "Vous essayer d'acceder à $nomPropriete."
}

Sérialiser / Désérialiser un objet

Pour déplacer un objet d’une page à une autre, dans des sessions, on est obligé de sérialiser un objet qui perd de ce fait sa forme. Lors de l’opération de sérialisation, l’objet devient une chaine de caractères. Pour garder la structure, les données et la forme de l’objet, on passera par la méthode magique __sleep

Dans __sleep(), on retournera un tableau comportant la liste des propriétés à sauvegarder. Lors de la désérialisation, la méthode magique __wakeup() est appellée.

//maClass.class.php
class maClasse {
	public $a = 'A';
	private $b = 'B';
	private $c = 'C';

	public function __sleep() {
		return array('a','b','c');
	}
	public function __wakeup(){
		$this->a = $this->a.'h';
	}
	public function __toString(){
		return "a= $this->a ; b=$this->b ; c=$this->c";
	}
}
//Page 1
	session_start();
	include('maClasse.class.php');
	$a = new maClasse();
	echo $a;
	$_SESSION['maClasse'] = serialize($a);
//Page 2
	session_start();
	include('maClasse.class.php');
	$a = unserialize($_SESSION['maClasse']);
	echo $a->a;

ATTENTION : en PHP4, les propriétés sont crées automatiquements quand elles n’existent pas. Les méthodes non existantes reverront une erreur quand elles seront appellées.

Les opérateurs == et !=

L’opérateur == et != sont identiques en PHP4 et PHP5. Ils vérifient que les deux objets sont instanciés par la même classe et que toutes les propriétés de la classe ont les memes valeurs

Les opérateurs === et !==

Vérifie si les deux variables ont la même référence sur le même objet.

L’opérateur instanceof()

Permet de vérifier si un objet est dérivé hérité d’un autre objet.

$o = new A();
$p = new A();
$q = $o;
$r = clone $o;
$s = new B();
$o == $p; // true
$o === $p; // false
$o == $q; // true
$o === $q; // true
$o == $r; // true;
$o === $r; // false
$o == $s; // false
$o === $s; //false