surcharges et heritages...

Le
speak.me
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
P. Renaud
Le #1613543
wrote:
Salut à tous...

$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" ????


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
Le #1641097
Salut à tous...
Salut



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.



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
Le #1665547

Alors que ce que j'attends est :
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 />";

speak.me
Le #1665544
On 18 mar, 08:37, Antoine Polatouche

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


Avec protected, ça fait comme tu le veux:

[...]


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
Le #1688234

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


C'est un bogue connu de PHP depuis... longtemps :)

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Publicité
Poster une réponse
Anonyme