Utiliser une variable d'une class mere dans une class fille

Mammouth du PHP | 991 Messages

16 févr. 2009, 10:04

Bonjour a tous , certes le titre n'est pas clair mais cela s'explique tous simplement que je ne sais pas mettre un nom sur mon problème.

Je vais vous expliquer la situation
j'aimerais utiliser dans une class fille , une variable d'une class mere , puis ensuite l'afficher.

Okay vous avez rien compris ?

Voici le code que j'ai écrit :
<?php
class A
{
	public $print = array();
	function getPrint($var)
	{
		$this->print[] = $var;
	}
	function vPrint()
	{
		foreach ($this->print as $key => $value)
		{
			echo $value;
		}
	}
}
class B extends A
{
	function onPrint()
	{
		A::getPrint("Oh");
	}
}
$a = new A();
$b = new B();

$b->onPrint();
$a->vPrint();


?>
Donc en toute logique $a->vPrint(); devrais écrire : Oh pourtant rien.
En essayant $b->vprint(); cela marche.

Une idée pour que $a->vPrint(); marche ?

merci d'avance Hawk
DevOps, Symfony4, Hoa

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

16 févr. 2009, 12:03

$this->getPrint tout simplement, vu que tu hérites logiquement des méthodes et attributs de la classe mère

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

16 févr. 2009, 12:07

Non, l'héritage entre classes permet de réutiliser les membres (variables et méthodes) de la classe mère au niveau d'une classe fille et ce pour une instance de la fille. Tu ne peux pas espérer mettre en relation physique deux instances différentes. C'est pour cela que quand tu fais:
$a = new A();
$b = new B();
Tu déclare 2 objets distinct dans la mémoire: $a ne voit pas $b et vis-versa. Par contre pour exploiter l'héritage déclaré entre B et A c'est au niveau de l'objet $b que c'est possible de le faire, car $b étant hériter de la classe A a accès à tous ses membre. Du coups t'as plus besoin de créer l'objet $a car en créant $b, implicitement tu a accès aux membres de la classe A via l'objet $b.

Voici donc le corrigé:
$b = new B();

$b->onPrint();
$b->vPrint(); 
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 991 Messages

16 févr. 2009, 12:10

Je me sens tout c** :oops:

vu que je demandais a une classe fille de toucher a une variable de la mere , et a la mere de l'afficher.

Encore merci =) :D
DevOps, Symfony4, Hoa