Discussion:
surcharges et heritages...
(trop ancien pour répondre)
s***@gmail.com
2008-03-17 16:16:06 UTC
Permalink
Salut à tous...

Je n'ai pas trop l'habitude de poster pour demander de l'aide mais
dans ce cas... j'avoue avoir besoin d'une aide autre que google ! Même
si c'est au final pour m'entendre dire que c'est impossible.

Voici mon problème en version simplifiée :
J'ai 2 classes foo et bar,
la premiere definie une variable privee et un fonction qui renvoi
cette variable,
la seconde herite de la premiere et redefinie la variable.
J'attends donc que l'appel de la fonction pour un objet instancié me
renvoi le nom de la bonne classe.

Exemple :
class foo
{
private $nom = 'foo';
public function get() {return $this->nom;}
}
class bar
{
private $nom = 'bar';
}

$foo = new foo;
$bar = new bar;

echo "premiere classe : ".$foo->get()".<br />";
echo "seconde classe : ".$bar->get()".<br />";

Resultat :
premiere classe : foo
seconde classe : foo

Alors que ce que j'attends est :
premiere classe : foo
seconde classe : bar

Y a-t-il moyen de faire "un truc comme ca" ????

Merci d'avance pour vos contributions/commentaires.
P. Renaud
2008-03-17 21:29:39 UTC
Permalink
Post by s***@gmail.com
Salut à tous...
$foo = new foo;
$bar = new bar;
echo "premiere classe : ".$foo->get()".<br />";
echo "seconde classe : ".$bar->get()".<br />";
premiere classe : foo
seconde classe : foo
premiere classe : foo
seconde classe : bar
Y a-t-il moyen de faire "un truc comme ca" ????
Salut,

J'espère ne pas répondre trop à côté de ta demande, mais voici deux idées :
- passer ta variable $nom en protected
- redéfinir ta méthode bar::get(), et utiliser des variables
différentes. $nom_foo et $nom_bar, par exemple
Jibux
2008-03-18 07:37:11 UTC
Permalink
Post by s***@gmail.com
Salut à tous...
Salut
Post by s***@gmail.com
Je n'ai pas trop l'habitude de poster pour demander de l'aide mais
dans ce cas... j'avoue avoir besoin d'une aide autre que google ! Même
si c'est au final pour m'entendre dire que c'est impossible.
J'ai 2 classes foo et bar,
la premiere definie une variable privee et un fonction qui renvoi
cette variable,
la seconde herite de la premiere et redefinie la variable.
J'attends donc que l'appel de la fonction pour un objet instancié me
renvoi le nom de la bonne classe.
class foo{
protected $nom = foo;
public function get() { return $this->nom;}
}
class bar extends foo{
protected $nom = 'bar';
}

$foo = new foo;
$bar = new bar;

echo "premiere classe : ".$foo->get()."<br />";
echo "seconde classe : ".$bar->get()."<br />";


Il fallait simplement utiliser protected au lieu de private pour pouvoir
utiliser la variable dans la classe bar pour obtenir :


premiere classe : foo
seconde classe : bar
Antoine Polatouche
2008-03-18 07:37:11 UTC
Permalink
Post by s***@gmail.com
premiere classe : foo
seconde classe : bar
Y a-t-il moyen de faire "un truc comme ca" ????
Avec protected, ça fait comme tu le veux:

class foo
{
protected $nom = 'foo';
public function get() {return $this->nom;}
}

class bar extends foo
{
function bar()
{
$this->nom = 'bar';
}
}

$foo = new foo;
$bar = new bar;

echo "premiere classe : ".$foo->get()."<br />";
echo "seconde classe : ".$bar->get()."<br />";
s***@gmail.com
2008-03-18 22:36:58 UTC
Permalink
Post by s***@gmail.com
Y a-t-il moyen de faire "un truc comme ca" ????
[...]

Merci à tous pour ces réponses !
J'avais oublié l'utilité d'avoir de vraies personnes en face :)

Bref ça marche. c cool.
Thx all
Mickael Wolff
2008-03-19 06:49:05 UTC
Permalink
Post by s***@gmail.com
premiere classe : foo
seconde classe : bar
C'est un bogue connu de PHP depuis... longtemps :)
<http://bugs.php.net/bug.php?id=38037>
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Continuer la lecture sur narkive:
Loading...