[RESOLU] POO Notion d'héritage

ViPHP
ViPHP | 1986 Messages

04 févr. 2018, 09:31

Bonjour à tous,

Je cherche à comprendre les notions d'héritages complexes via l'utilisation de la POO.
J'ai déjà créer des classes héritées simples mais je voudrais savoir s'il est possible d’exécuter des fonctions de mêmes noms avec des ordres de priorités en utilisant les mots clés static::, self, ... J'avoue que je suis un peu perdu.
Voilà ce que j'ai en tête :
class classParent {

	public $tabTab = array();

	public function __construct () {
	
		static::_liaisonsTab();
	}
	
	protected function _creationTab() {
		return array("parentTab0", "parentTab1");
	}
	
	protected function _liaisonsTab() {
		
		array_push($this->tabTab,static::_creationTab());
		echo '<pre>';
		print_r ($this->tabTab);
		echo '</pre>';
		
		
	}
	
}

class classEnfant extends classParent {

	public function __construct () {
	
		static::_liaisonsTab();
	}
	
	protected function _creationTab() {	
		return array("enfantTab0", "enfantTab1");
	}
	
	protected function _liaisonsTab() {
	
		array_push($this->tabTab,static::_creationTab());
		echo '<pre>';
		print_r ($this->tabTab);
		echo '</pre>';
		$o = new classParent();
	}
}

$e = new classEnfant;
J'obtiens :
Array
(
    [0] => Array
        (
            [0] => enfantTab0
            [1] => enfantTab1
        )

)

Array
(
    [0] => Array
        (
            [0] => parentTab0
            [1] => parentTab1
        )

)
Alors que je voudrais :
Array
(
    [0] => Array
        (
            [0] => enfantTab0
            [1] => enfantTab1
            [2] => parentTab0
            [3] => parentTab1
        )
)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 1986 Messages

10 févr. 2018, 10:33

Finalement il fallait appeler la méthode parent sans instancier l'objet lui-même ie. remplacer $o = new classParent(); par parent::_liaisonsTab();
puis changer la fonction de mise en variable : array_walk(self::_creationTab(),function($i) {$this->tabTab[] = $i;});
Pour ceux que cela intéresse : j'ai utilisé une fonction anonyme pour récupérer toutes les occurrences de la variable.

<?php
class classParent {

	public $tabTab = array();

	public function __construct () {
	
		static::_liaisonsTab();
	}
	
	protected function _creationTab() {
		return array("parentTab0", "parentTab1");
	}
	
	protected function _liaisonsTab() {
		
		array_walk(self::_creationTab(),function($i) {$this->tabTab[] = $i;});
		
	}
	
}

class classEnfant extends classParent {

	public function __construct () {
	
		static::_liaisonsTab();
	}
	
	protected function _creationTab() {	
		return array("enfantTab0", "enfantTab1");
	}
	
	protected function _liaisonsTab() {
	
		array_walk(self::_creationTab(),function($i) {$this->tabTab[] = $i;});
		parent::_liaisonsTab();
	}
}

$e = new classEnfant;
echo '<pre>';
print_r ($e->tabTab);
echo '</pre>';

$p = new classParent;
echo '<pre>';
print_r ($p->tabTab);
echo '</pre>';
?>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr