Bonjour!
Je suis confronté comme cela à du arrivé à d'autres que moiLe multi héritage en php !
Comment le simuler puisque que nativement apparemment cela n'est pas possible en php.
Alors en faisant des recherche je suis tombé sur ce lien :
http://jf-lepine.developpez.com/tuto...tiple-php/#LII
J'ai effectivement besoin d'un multi héritage ou dans le cadre d'un développement j'ai une class Main.Class.php
Qui dois hérité de base d'une class model et d'une class view pour chargé les vue que je souhaite.
Mais elle peut aussi avoir besoin d'une class form, session, check etc...
Je voudrai ne pas devoir redéclarer des objet pour les utilisé donc faire un héritage.
Maintenant mon problème :
Je me suis basé sur la première méthode donnée donc avec le code qui va avec
Mais de mon coté quand je j'exécute le code je me retrouve avec une erreur :
Donc ma class n'est pas chargé.Fatal error: Class 'Parent2' not found in
Pour essayer autre chose avant ma class du coup j'ai fait un :
Ce qui me donne un autre résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php include('Parent1.php'); include('Parent2.php'); include('Parent3.php');
Donc ont peut voir que ma classe Parent2 est chargée !Cette fonction est héritée de la classe parent2
Notice: Undefined variable: funcName in C:\Program Files (x86)\EasyPHP-12.1\www\multi\Child.php on line 43
Notice: Undefined variable: funcName in C:\Program Files (x86)\EasyPHP-12.1\www\multi\Child.php on line 43
Fatal error: Uncaught exception 'Exception' with message 'The attribute2 attribute doesn't exist' in C:\Program Files (x86)\EasyPHP-12.1\www\multi\Child.php:45 Stack trace: #0 C:\Program Files (x86)\EasyPHP-12.1\www\multi\Child.php(56): Child->__get('attribute2') #1 {main} thrown in C:\Program Files (x86)\EasyPHP-12.1\www\multi\Child.php on line 45
Mais après cela ne colle plus je ne comprend du coup pas trop le problème..
Si vous avez une solution ?
Merci : )
Voici le code Complet de la classe Récupérer via le tuto :
Merci à vous.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 <?php include('Parent1.php'); //Mon ajout include('Parent2.php'); //Mon ajout include('Parent3.php'); //Mon ajout class Child extends Parent1 { private $_tExtends = array('Parent2', 'Parent3'); private $_tExendInstances = array(); /** * Constructeur * création des instances de chaque classe mère */ public function __construct() { // ::::: build instance for each parent class ::::: foreach($this->_tExtends as $className){ $this->_tExendInstances[] = new $className; } } /** * Méthode magique __call() * On va reporter chaque appel sur une des instances des classes mères * @param string $funcName * @param array $tArgs * @return mixed */ public function __call($funcName, $tArgs) { foreach($this->_tExendInstances as &$object) { if(method_exists($object, $funcName)) return call_user_func_array(array($object, $funcName), $tArgs); } throw new Exception("The $funcName method doesn't exist"); } /** * Méthode magique __get() * On va reporter chaque lecture d'attribut (accesseur) sur une des instances des classes mères * @param string $varName * @return mixed */ public function __get($varName) { foreach($this->_tExendInstances as &$object) { $tDefinedVars = get_defined_vars($object); if(property_exists($object, $funcName)) return $object->{$varName}; } throw new Exception("The $varName attribute doesn't exist"); } } $oChild = new Child; // appel d'une méthode parente $oChild->method2(); // affiche "called in parent 2" // lecture d'une variable echo $oChild->attribute2; // affiche "demo"
Partager