Page 1 sur 1

__get et __set

Posté : 04 oct. 2005, 21:57
par jeff
salut
une petite question sur __get et __set je ne comprend pas tres bien leur utilisation en c++ pour ce que je m'en souvient c'est methode servent a acceder au attribut et à les modifier
mais en php elles servent dans le cas ou l'on essai de definir des attribut nom definie dans la classe
la je suis perdu

Posté : 04 oct. 2005, 22:17
par ouckileou
je ne les ai jamais utilisé, mais d'après ce que je lis dans la doc, cela sert à définir toi même un getter et un setter, à éventuellement faire des trucs un peu plus élaboré

du genre, si tu veux récupérer la valeur d'un attribut qui est à null, tu peux faire un getter spécial qui au lieu de te renvoer null, te renverra une chaine de caractères "vide"

voici ce que j'en ai compris, c'est donc simplement un mécanisme de surcharge

quelqu'un corrigera si je me trompe ;)

Posté : 04 oct. 2005, 22:46
par Xenon_54
Bonjour,

__get(), __set() et __call() permettent la surcharge.

__get() a un paramètre: le nom de la propriété à retourner.
__set() a deux paramètres: le nom de la propriété ainsi que la valeur à lui attribuer.
__call() possède deux paramètres: le nom de la méthode à appeller et un tableau des paramètres à passer à celle-ci.

Exemples
<?php
class arrayObject {

	protected $tableau = array();

	public function __construct() {}

	public function __get($name) {

		if (TRUE === isset($this->tableau[$name]) {
			return $this->tableau[$name];
		} else {
			return NULL;
		}
	}

	public function __set($name, $value) {

		$this->tableau[$name] = $value;
	}

	public function __call($name, $params) {

		switch($name) {

			case 'count':
				return sizeOf($this->tableau);
				break;

			case 'in':
				return in_array_keys($params[0], $this->tableau);
				break;

			default:
				break;
		}
	}
}
?>

Posté : 05 oct. 2005, 00:01
par ouckileou
ok, merci d'avoir précisé :pouce:

Posté : 05 oct. 2005, 15:44
par jeff
merci
la c'est deja plus clair :D
aller un peu de pub
un petit qui gagne à etre connu http://www.generationphp.net :langue: :oops:

Posté : 05 oct. 2005, 16:03
par Xenon_54