Je dois créer un objet en lui passant un nombre de parametre variable.
J'ai donc un tableau avec mes arguments et je pourrais utiliser
call_user_method_array mais le probleme etant que je veux passer mes
arguments a la fonction __construct de mon objet, celui netant pas
encore crée. Pour l'instant je ne vois pas comment faire pour
construire mon objet avec ette methode.
et apres je dois creer cet objet, mais le probleme c que le nombre d'arguments passé est variable(0,1,2...)
j'ai un tableau qui contient tous ces arguments $montableau
Je dois donc creer un objet en lui passant les arguments que contient $montableau
si je fais ca
$monobjet=new maclasse($montableau);
il va lui passer un tableau en argument donc ca ne minteresse pas.
Prenons un exemple ca sera plus simple :)
$montableau[0]="arg1";
$montableau[1]="arg2";
$montableau[2]="arg3";
Si je fais $monobjet=new monobjet($montableau)
ds le contructeur de maclasse j'aurais
$args[0]=$montableau
alors que moi je veux:
$args[0]="arg1"
$args[1]="arg2"
$args[2]="arg3"
Avec call_user_method_array() c'est possible mais le probleme c'est que
mon objet n'est pas crée mais je me suis rendu compte quon pouvait a la
place du nom de lobjet passer le nom de la class pour le créer, ce qui
donne
func_get_arg() peut être utilisé
conjointement à func_num_args() et
func_get_args() pour permettre aux fonctions
utilisateurs d'accepter un nombre variable d'arguments
Oui en effet j'ai bien l'impression que je ne suis pas compris :)
Je vais expliquer le plus exhaustivement ma situation. J'ai une classe(gcls) qui gere toutes mes autres classes. Lorsque je veux creer un nouvel objet je ne fais pas :
$obj= new monobj();
mais:
$obj=$gcls->new_class(type, params);
de sorte que comme mes objets sont identifiés par un id unique je ne
peux pas creer deux fois un objet qui fait reference a un seul objet en
fin de compte.
Par exemple j'ai une classe "member" qui se creer de la facon suivante:
$member =new member(1);
Ou 1 est l'identifiant unique du membre en question. Il se trouve que
parfois dans une meme page je fais reference deux fois au membre 1 mais
avec deux objets differents:
$member1= new member(1):
$member2=new member(1):
Ce qui est stupide puisque je fais des requetes SQL en plus pour rien du tout, sans parler de la memoire utilisée pour rien.
Donc je passe par glcs qui possede un tableau contenant tous mes objets crées.
Il m'arrive donc d'avoir:
$member1 =$gcls->new_class("member","1");
$member2=$gcls->new_class("member","1");
Mais au lieu de creer 2 objets je n'en creer qu'un au premier appel et
le deuxieme n'est pas crée, il fait juste reference au premier.
Mais lors de la creation de l'objet dans gcls je dois passer mes arguments de new_class, a partir du 2e, a la fonction constructrice de l'objet.
Je peux passer un tableau comme argument et ainsi n'avoir qu'un seul
arguement pour chaque creation de classe mais ca ne minteresse pas.
Aussi j'utilise call_user_method_array() pour passer ces arguments. Jusque la c'est bon, sauf que la methode que je veux appeler est __construct(). Il se trouve qu'avec call_user_method_array() on peut creer un objet mais je ne sais pas comment appeler __construct() car il me dit que ce n'est pas une methode statique.
je ne suis toujours pas sur de comprendre pourquoi tu as absolument besoin de faire ca. Tu peux sans doute eviter de creer 2 fois le meme objet (identique je veux dire), il y a plein de fonctions (et operateurs) pour ca en php.
Tu ne pourras pas appeler le constructeur comme ca : le constructeur ne peut pas etre declare statique (normal, ce n'est pas une methode "normale").
Mais comme je ne pige toujours pas pourquoi tu veux absoument appeler le constructeur de cette maniere, lol...je peux difficilement essayer de t'aider plus :-(
Le truc c'est que la j'ai une classe qui va tout gerer. Parceque j'ai
quand meme une 50aine de classe differentes et pas mal de processus qui
tournent en parallele. Alors si je m'amuse a chaque fois separement a
tester ca... Et la les includes des fichiers contenant mes classes ne
sont faits que lorsque la classe est reellement utilisee. De plus ce
mode de fonctionnement me permet de faire des logs puisque chaque
creation dobjet est repertorie. Et j'espere ensuite pouvoir faire
passer tous mes appels de fonctions de classe par cette classe. Mais
bon ca va attendre un peu, ca demande reflection :)
Je sens que je vais etre une oblige de creer une méthode particuliere
pour se "substituer" a __construct() mais ca mennuie fortement.