Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

surcharges et heritages...

5 réponses
Avatar
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.

5 réponses

Avatar
P. Renaud
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

Avatar
Antoine Polatouche

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 />";

Avatar
Jibux
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

Avatar
speak.me
On 18 mar, 08:37, Antoine Polatouche wrote:

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


Avatar
Mickael Wolff

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


C'est un bogue connu de PHP depuis... longtemps :)
<http://bugs.php.net/bug.php?id8037>

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