Bjr,
J'utilise php5 dans un Developpement Objet.
Les attributs de mes classes sont déclarés en private.
Auparavant (en php 4 ), je pouvais lister les attributs de ma classe
(déclarés par défaut en public), par le biais d'un foreach(monobjet
as $attribut => valeur).
Avec ds attributs private cela devient bien sur impossible.
Existe t il un moyen de parcouris les attributs privés de ma classe
autrement que par ce foreahc devenu oboslete, ou bien suuis je obligé
d'appeler un a un mes attributs avec mes getters ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Clifden
Avec des attributs private cela devient bien sur impossible.
Normal, c'est le but du private :-)
Existe t il un moyen de parcouris les attributs privés de ma classe autrement que par ce foreach devenu obsolete, ou bien suis je obligé d'appeler un a un mes attributs avec mes getters ?
tu es obligé de passer par des fonctions, donc des getters
par contre, est-ce que quelqu'un a joué avec les __get et __set ??
j'ai eu des comportements bizarre avec, par exemple:
class foo { private $bar="test";
public function __construct() { }
public function __get($name) { if ($name=="bar") return $this->bar; } }
$a=new foo(); echo $a->bar;
ca ne marchais pas, je me prenais un error, car php5 pensais que je voulais acceder à bar directement, sans passer par la magic function __get.
Tous les exemples que j'ai vu sur le net faisaient état d'une variable interne privée de type tableau associatif, et les magic function __get et __set se contentait d'acceder à la clé voulue dans ce tableau en lecture ou en ecriture. Mais ce n'est pas génial ni lisible au niveau de la classe que de n'avoir qu'une seule variable tableau, avec les vraies données dedans. Enfin je trouve...
Quelqu'un a plus d'experience?
-- Julien PACHET
Avec des attributs private cela devient bien sur impossible.
Normal, c'est le but du private :-)
Existe t il un moyen de parcouris les attributs privés de ma classe
autrement que par ce foreach devenu obsolete, ou bien suis je obligé
d'appeler un a un mes attributs avec mes getters ?
tu es obligé de passer par des fonctions, donc des getters
par contre, est-ce que quelqu'un a joué avec les __get et __set ??
j'ai eu des comportements bizarre avec, par exemple:
class foo {
private $bar="test";
public function __construct() {
}
public function __get($name) {
if ($name=="bar")
return $this->bar;
}
}
$a=new foo();
echo $a->bar;
ca ne marchais pas, je me prenais un error, car php5 pensais que je
voulais acceder à bar directement, sans passer par la magic function __get.
Tous les exemples que j'ai vu sur le net faisaient état d'une variable
interne privée de type tableau associatif, et les magic function __get
et __set se contentait d'acceder à la clé voulue dans ce tableau en
lecture ou en ecriture. Mais ce n'est pas génial ni lisible au niveau de
la classe que de n'avoir qu'une seule variable tableau, avec les vraies
données dedans. Enfin je trouve...
Avec des attributs private cela devient bien sur impossible.
Normal, c'est le but du private :-)
Existe t il un moyen de parcouris les attributs privés de ma classe autrement que par ce foreach devenu obsolete, ou bien suis je obligé d'appeler un a un mes attributs avec mes getters ?
tu es obligé de passer par des fonctions, donc des getters
par contre, est-ce que quelqu'un a joué avec les __get et __set ??
j'ai eu des comportements bizarre avec, par exemple:
class foo { private $bar="test";
public function __construct() { }
public function __get($name) { if ($name=="bar") return $this->bar; } }
$a=new foo(); echo $a->bar;
ca ne marchais pas, je me prenais un error, car php5 pensais que je voulais acceder à bar directement, sans passer par la magic function __get.
Tous les exemples que j'ai vu sur le net faisaient état d'une variable interne privée de type tableau associatif, et les magic function __get et __set se contentait d'acceder à la clé voulue dans ce tableau en lecture ou en ecriture. Mais ce n'est pas génial ni lisible au niveau de la classe que de n'avoir qu'une seule variable tableau, avec les vraies données dedans. Enfin je trouve...
Quelqu'un a plus d'experience?
-- Julien PACHET
cleo
Existe t il un moyen de parcourir les attributs privés de ma classe
Salut, Oui ... fais des recherches sur la classe "Reflection"
-- Cléo.
Existe t il un moyen de parcourir les attributs privés de ma classe
Salut,
Oui ... fais des recherches sur la classe "Reflection"
Salut, Oui ... fais des recherches sur la classe "Reflection"
ici par exemple: http://www.nexen.net/docs/php/annotee/language.oop5.reflection.introduction.php
-- Cléo
cleo
Oui ... fais des recherches sur la classe "Reflection" En fait, Non ...
Les classes "ReflectionXX" te permettent en effet d'introspecter la structure [de fonction ou] d'object, mais ne permet en aucun cas de contourner l'accessibilité de leurs propriétés ou méthodes.
Pour confirmer: class Test { private $_var = 10 ; private function getVar() { return $this->_var; } }
$z = new Test(); $rc = new ReflectionClass("Test"); $rp = $rc->getProperty("_var"); $rm = $rc->getMethod("getVar");
Désolé de n'avoir pas pris le temps de vérifier l'info avant. -- Cléo
Oui ... fais des recherches sur la classe "Reflection"
En fait, Non ...
Les classes "ReflectionXX" te permettent en effet d'introspecter la
structure [de fonction ou] d'object, mais ne permet en aucun cas de
contourner l'accessibilité de leurs propriétés ou méthodes.
Pour confirmer:
class Test
{
private $_var = 10 ;
private function getVar() { return $this->_var; }
}
$z = new Test();
$rc = new ReflectionClass("Test");
$rp = $rc->getProperty("_var");
$rm = $rc->getMethod("getVar");
Oui ... fais des recherches sur la classe "Reflection" En fait, Non ...
Les classes "ReflectionXX" te permettent en effet d'introspecter la structure [de fonction ou] d'object, mais ne permet en aucun cas de contourner l'accessibilité de leurs propriétés ou méthodes.
Pour confirmer: class Test { private $_var = 10 ; private function getVar() { return $this->_var; } }
$z = new Test(); $rc = new ReflectionClass("Test"); $rp = $rc->getProperty("_var"); $rm = $rc->getMethod("getVar");