Imbrication de class en php

Fermé
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 - 13 janv. 2009 à 18:32
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 - 14 janv. 2009 à 08:54
Bonjour,

voila mon code :
class __1
{
	public function testVar($var) {
		if(is_numeric($var)) {
			return $var;
		}
	}
}

class __2
{
	
	public function mul($var){
		return 2*$var;
		}
}

class __3
{
	public function display($var) {
		echo '<p>'.$var.'</p>';}
}

$var = '10';
$test1 = new __1(); 
$test1 -> test2 = new __2();

print_r($test1->test2->mul($var));



je souhaite faire en sorte que ça me retourne la valeur de la multiplication de la méthode de la class __2 que si la méthode de la class __1 retourne true.

et tout cela en imbriquant mes objets.

merci infiniment d'avance
A voir également:

3 réponses

Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
13 janv. 2009 à 19:02
J'aurais plutôt fais ça :
class __1
{
	public function testVar($var) {
			return is_numeric($var);
	}
}

class __2 extends __1
{
	public function mul($var){
               if ($this->testVar($var))
		      return 2*$var;
              else
                    return false;
	}
}

$var = '10';
$test = new __2(); 

print_r($test->mul($var));
Si tu veux vraiment imbriquer tes objets sans héritage, alors tu n'as pas d'autre choix que de rendre accessible la classe contenante au contenu par exemple :

class __1
{
	public function testVar($var) {
			return is_numeric($var);
	}

}

class __2
{
      function__construct($container){
         if (method_exists($container, 'testVar')
            $this->container = $container;
          else
           echo "TODO : gestion d'erreur";
      }

	public function mul($var){
               if ($this->container->testVar($var))
		      return 2*$var;
              else
                    return false;
	}
}

$var = '10';
$test1->test2 = new __2($test1); 
print_r($test1->test2->mul($var));
0
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 5
13 janv. 2009 à 19:30
Ta deuxième solution m'intéresse beaucoup :) :) :) :)

Mais est-il possible de généraliser un peu plus la class __2. C'est dire que je veux pouvoir utiliser n'importe quel méthode de la class __1 sans forcément à devoir déclarer la méthode par la fonction : method_exists();

je début en la matière et j'ai vus un truc de ce genre (je ne dit pas que le code suivant en bon):

class __1
{
	public function testVar($var) {
			return is_numeric($var);
	}

}

class __2
{

function__construct(&$test1){
}

	public function mul($var){
               if ($this->container->testVar($var))
		      return 2*$var;
              else
                    return false;
	}
}

$var = '10';
$test1->test2 = new __2($test1); 
print_r($test1->test2->mul($var));


j'ai cru comprendre (mais je peux me tromper) que ça permettait de faire la même chose ? Non ?

Par contre je ne sais pas comment.

Y a t'il une solution pour généraliser la class ?

Merci encore pour ta réponse.
0
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 5
14 janv. 2009 à 08:54
autant pour moi... La prochaine fois je réfléchirais 2 fois avant de répondre. En faite le dernier post revient au même de ta solution sauf que je ne vérifie pas si méthode existe.
merci
0