Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2007, 11h46   #1
Membre habitué
 
Inscription : décembre 2004
Messages : 317
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 317
Points : 124
Points : 124
Par défaut [POO] __Get / __Set et héritage

Est-il possible d'hérité des méthodes __Get et _Set ?

J'essaye de faire un truc du genre :


Ma class:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Derive{
 
	public function __construct() {
	}
 
		public function __get($nm){
 
		if (isset($this->membre[$nm])) {
			$r = $this->membre[$nm];
			return $r;
		} else {
			return null;
		}
	}
 
	public function __set($nm, $val){
		if (isset($this->membre[$nm]))
			$this->membre[$nm] = $val;
	}
 
	public function __isset($nm){
		return isset($this->membre[$nm]);
	}
 
	public function __unset($nm){
		unset($this->membre[$nm]);
	}
}
Ma classe :

Code :
1
2
3
4
5
6
7
8
require_once('derive.php');
class Setter Extends Derive
{
	private $x = array("a" => 1, "b" => 2, "c" => 3);
 
	public function __construct() {
	}
}
kendras est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 12h19   #2
Inactif
 
Avatar de CR_Gio
 
Inscription : septembre 2005
Messages : 1 196
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 1 196
Points : 1 201
Points : 1 201
Bonjour,

Je crois qu'il faut faire :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
require_once('derive.php');
class Setter Extends Derive
{
	private $x = array("a" => 1, "b" => 2, "c" => 3);
 
	public function __construct() {
		parent::__construct();
	}
	public function __get($nm) {
		parent::__get($nm);
	}
}
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 12h47   #3
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
A l'époque ou j'ai découvert ces méthodes magiques, je suis quasiment sûr qu'il fallait obligatoirement les mettre en private.
Et bizarrement, même à l'heure actuelle, cela fonctionne en private, y compris l'héritage, ce qui est plutôt étrange.
Enfin maintenant, ils disent qu'ils faut les mettre en public, ce qui ne change rien au final, vu le comportement actuel des méthodes.

Donc moi ceci fonctionnne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
class A {
    private function __get($key) {
    // ...
    }
}
 
class B extends A {
}
 
$b = new B;
$b->toto = 'titi'; // Utilise la méthode __get de A
__________________
Articles sur developpez.com
- Gestion des exceptions avec PHP5
- Chiffrement et hash en PHP contre l'attaque Man in the middle
- Aedituus - Espace membre sécurisé en PHP5

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 14h10   #4
Membre habitué
 
Inscription : décembre 2004
Messages : 317
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 317
Points : 124
Points : 124
le problème c'est que le
Code :
private $x = array("a" => 1, "b" => 2, "c" => 3);
n'est pas connu par la classe parent ...

Ce n'est pas encore au point les __get et __set, mais c'est toujours ça de pris ...
kendras est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 14h51   #5
Membre habitué
 
Inscription : décembre 2004
Messages : 317
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 317
Points : 124
Points : 124
Ruse de Siou :

Code :
1
2
3
4
5
6
7
8
Class Derive
{
	 private $x ;
 
		public function __construct(&$proprietes) {
			$this->x = $proprietes;
	}
}
Code :
1
2
3
4
5
6
7
8
9
require_once('derive.php');
class Setter Extends Derive
{
	private $x = array("a" => 1, "b" => 2, "c" => 3);
 
	public function __construct() {
		parent::__construct($this->x);
	}
}
kendras est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h28.


 
 
 
 
Partenaires

Hébergement Web