Page 1 sur 1

POO Notion d'héritage

Posté : 04 févr. 2018, 09:31
par Aureusms
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
        )
)

Re: POO Notion d'héritage

Posté : 10 févr. 2018, 10:33
par Aureusms
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>';
?>