Page 1 sur 1

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

Posté : 30 déc. 2005, 18:15
par Ultiny
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]

Posté : 30 déc. 2005, 18:18
par Cyrano
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.

Posté : 30 déc. 2005, 18:28
par solo
Si la méthode est déclarée en statique tu peux l'utiliser en méthode de classe.
class1::methode();

Posté : 30 déc. 2005, 18:30
par Ultiny
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.

Posté : 30 déc. 2005, 18:33
par Ultiny
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

Posté : 30 déc. 2005, 19:25
par jeff
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:

Posté : 30 déc. 2005, 19:39
par jeff
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

Posté : 30 déc. 2005, 19:50
par Ultiny
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é"

Posté : 30 déc. 2005, 19:54
par jeff
t'est pas obliger de l'instancier plusieur fois, regarde du cote de masque singletonhttp://fr.php.net/manual/fr/language.oop5.patterns.php