Récupération des arguments dans une function via une autre function

Eléphant du PHP | 453 Messages

12 févr. 2009, 21:49

Salut tout le monde,

Là j'ai un petit soucis de code et je ne vois pas comment trouver la solution. Je cherche à récupérer la liste des arguments d'une fonction dans une autre fonction afin de les traiter. Un petit exemple vaut mieux qu'un long discourt :
$fruit = array ( "pomme","poire","raisin");

function maFonction($arg1){
	$seuilArgument = 1;
		if(func_num_args()>$seuilArgument){
			for($i = $seuilArgument ; $i< func_num_args() ; $i++){
				$parametre = func_get_arg($i);
				if(array_search($parametre,$fruit)){
					echo "ok";
				}else{
					echo "ko";
				}
			}
		} 
	
	//suite du script

	//traitement de la fonction
}
Voila à peu près ce que je désire mettre en fonction vue que cela va être récurant sur d'autres function. Ceci est en vue de placer cela en objet. Je n'ai pas trop envie de faire du copier/coller et je pense qu'il y a une solution annexe plus élégante :). J'ai vu que depuis la version 5.3 de php, les fonctions (func_num_args, func_get_arg, func_get_args) peuvent être intègrer dans les paramètres de fonction. Mais ma version de php est 5.2.2 (Wamp 1.7).

J'ai essayé ceci mais bien sûr je me doutais que cela ne fonctionerai pas :
function erreurTraitement($parametre){
	call_func_user("maFonction",$arg = func_get_args());
	//génère une erreur
}
J'espère que j'ai été relativement clair dans mes propos. Je vous remercie par avance de me donner un petit coup de pouce.

++ et bonne soirée à vous :)

PS : code fait de tête, j'ai oublié mes données à la maison et je suis dans un cyber. Il se peut qu'il y ait des petites pétouilles de syntaxe.[/i]
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

12 févr. 2009, 22:18

regarde du côté de debug_backtrace() ça te renvoie un tableau associatif représentant la trace d'exécution, et tu devrais y trouver ton bonheur je pense.
Ce que tu veux ça doit être l'index 'args' du 2e ou 3e élément de ce tableau.

ViPHP
ViPHP | 4674 Messages

15 févr. 2009, 13:41

Hey :),

Regarde surtout du côté de call_user_func_array() si je peux me permettre.
Tu aurais quelque chose de ce genre :
function f ( ) {

    var_dump(func_get_args());
}

function g ( ) {

    call_user_func_array('f', func_get_args());
}

g(1, 3, 'seven');
Mais attention (!), func_get_args() ne peut pas être placée en paramètres. Donc :
function f ( ) {

    var_dump(func_get_args());
}

function g ( ) {

    $arguments = func_get_args();
    call_user_func_array('f', $arguments);
}

g(1, 3, 'seven');
Affichera :

Code : Tout sélectionner

array(3) { [0]=> int(1) [1]=> int(3) [2]=> string(5) "seven" }
Mais je me pose des questions sur la pertinence de cette méthode de travail :-k … Tu veux faire quoi au juste ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).