aguiran
Messages postés5Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention27 février 2006
-
27 févr. 2006 à 11:12
aguiran
Messages postés5Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention27 février 2006
-
27 févr. 2006 à 11:37
Salut,
Mon pb ressemble un peu à celui posé par Mandark le 11/02, mais je ne
souhaite pour ma part, pas ré-instancier un objet dans dans une autre
classe, mais à l'extérieur.
Essayons d'être clair (ça va être dur :o)) :
je souhaiterais passer un objet O (insctancié avec la classe C1) en
paramètre d'une méthode d'une classe C2 et ainsi utiliser les méthodes
et attributs de l'objet O dans cette classe C2.
Je voudrais eviter l'erreur : Call to a member function on a non-object
(Info : j'ai déjà tenté le passage par référence mais ça ne marche pas,
enfin si peut-être, mais il faut alors braver les interdits de la
déprécation, et ça j'évite )
En fait je voudrais savoir s'il est possible d'utiliser directement
l'objet sans passer obligatoirement par une
sérialisation/désérialisation qui entrainera forcément la déclaration
d'un nouvel objet. De toute façon cette méthode ne pourrait pas marcher
car souhaite que les modifs apportées dans la méthode de la classe C2
soit effectives en sortie sur l'objet O, et non sur une copie.
voilà la structure :
Partie 1
class Classe1{
Var id;
function Class1($idRef){
$this->id= $idRef;
}
}
Partie 2
class Classe2{
function Class2(){};
function agir($objetDeTypeClasse1
{
echo $objetDeTypeClasse1->id;
}
}
Partie 3
$Objet1 = new Class1(1);
$Objet2 = new Class2();
$Objet2->agir(Objet1);
Voilà, voilà,
Merci d'avance pour votre aide :o)
A voir également:
Utilisation d'une méthode avec pour parametre un objet
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 27 févr. 2006 à 11:25
salut...
Objectif atteint !!! Tu as été assez clair.
Je vais essayé de l'être tout autant...
Il y'a donc 2 problèmes ici :
1. S'assurer que le parametre passée à Classe2::agir() est bien une instance de Classe1
if( !is_object($objetDeTypeClasse1) ) return;
if( get_class($objetDeTypeClasse1) != 'classe1' ) return;
/* ici tu es sûr que $objetDeTypeClasse1 est une instance de Classe1 */
2. Que les modifications apportées dans Classe2::agir() sur le paramêtre $objetDeTypeClasse1 reste...
Deux solutions :
* Passage par référence ! (C'est fait pour...)
* Mais si tu es faché avec les références : retourner la copie de l'objet une fois les modifications fait
if( !is_object($objetDeTypeClasse1) ) return $objetDeTypeClasse1;
if( get_class($objetDeTypeClasse1) != 'classe1' ) return;
/* ici tu es sûr que $objetDeTypeClasse1 est une instance de Classe1 */
/* AGIR sur $objetDeTypeClasse1 */
return $objetDeTypeClasse1;
Et donc :
$Objet1 = new Classe1(1);
$Objet1 = Classe2::agir($Objet1);
aguiran
Messages postés5Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention27 février 2006 27 févr. 2006 à 11:37
merci J_G, tu as bien cerné le pb et tu as été 100%, ta méthode passe nickel :o)
Et pour répondre à darkduck, c'est parceque je bosse sur un serveur
bien blindé, sans doute configuré par un maniaco-psycopathe fana du INI
made by hand from scratch, et y'a beaucoup de choses que je ne peux pas
modifier. Et je ne sais pas exactement ce qui me bloque dans la config
du serveur.