Accéder a une methode depuis la methode d'une autre classe

ViPHP
ViPHP | 656 Messages

30 déc. 2005, 18:15

Bonsoir,

Je cherche depuis quelques dixaines de minutes à faire ceci:

class 1 {
methode 1
}

class 2 {
methode 2 appel la methode 1
}

instancie les deux classes.

Je voudrais pouvoir donc accéder à la premiere dans la deuxieme SANS utiliser extends car il y a bon nombre d'autres methodes dans la classe 1 qui seront inutiles dans la classe 2.

Merci de votre aide.

[Edit]Je souhaiterais en résumé rendre global toute ma classe 1 instanciée à ma classe 2[/Edit]

Mammouth du PHP | 19672 Messages

30 déc. 2005, 18:18

fais un incluide de la classe 1 et crée une instance de classe. Sans utiliser extends, je ne vois pas vraiment d'autre méthode.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 14 Messages

30 déc. 2005, 18:28

Si la méthode est déclarée en statique tu peux l'utiliser en méthode de classe.
class1::methode();

ViPHP
ViPHP | 656 Messages

30 déc. 2005, 18:30

Elle sont déja inclues toutes les deux dans mon index et y sont instanciées.

J'ai vu que global fonctionnait aussi pour la methode qui appel l'autre, mais dans ce cas je serais obligé de le faire a chaque methode ce qui est pénible.

Il n'y a pas un moyen de rendre quelque chose global à une classe entière?

Dernièrre possibilitée à laquelle j'ai pensé: utiliser extends mais rendre privé toutes les méthodes dont je ne souhaite pas avoir accés depuis la classe fille.

ViPHP
ViPHP | 656 Messages

30 déc. 2005, 18:33

Si la méthode est déclarée en statique tu peux l'utiliser en méthode de classe.
class1::methode();
J'ai essayé ceci mais (sans doute pour me faire c... :P ) ma methode de la classe 1 (celle qui est appelée) appelle elle même une autre methode (cette fois ci de sa classe) donc j'ai une erreur qui me montre que la methode 2 est bien executé mais la methode qu'elle appel n'est pas trouvée, logique puisque elle reste dans la classe 1

Mammouth du PHP | 1311 Messages

30 déc. 2005, 19:25

tu peut creer un objet de la classe 1 que tu passe en paramtere a la classe 2 pour en faire un attribut
$c1=new classe1();
$c2=new classe2($c1);

//et la classe2
class classe2
{
private $var;
public function __construct(classe1 $class)
{
$this->var=$class;
}

public function methode2()
{
$this->var->methode1();
}}
finalement j'ai dit la meme chose que cyrano :wink:

Mammouth du PHP | 1311 Messages

30 déc. 2005, 19:39

il y aurai peut etre une autre methode
tu creer une instance de ta classe 1 dans ta classe 2
avec __call
tu appel les methode de ta classe1 a travers ta classe 2 avec call_user_func_array

ViPHP
ViPHP | 656 Messages

30 déc. 2005, 19:50

J'aime bien ta première solution, en plus elle fonctionne :)

Je ne souhaitais pas instencier plusieurs fois la même classe.
Dans la première solution c'est correcte, je vais la prendre.

Merci pour votre aide, je mets en "Réglé"

Mammouth du PHP | 1311 Messages

30 déc. 2005, 19:54

t'est pas obliger de l'instancier plusieur fois, regarde du cote de masque singletonhttp://fr.php.net/manual/fr/language.oop5.patterns.php