begin process at 2012 05 27 20:07:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > EXÉCUTER UNE FONCTION SI C'EN EST UNE

EXÉCUTER UNE FONCTION SI C'EN EST UNE


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Classé sous :fonction, détection, exécution, call Niveau :Débutant Date de création :20/08/2005 Date de mise à jour :20/08/2005 10:22:02 Vu :5 426

Auteur : malik7934

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Un de mes amis m'a demandé de lui faire ce bout de code tout court mais qui peut servir.

Le principe: on donne un string en paramètre. Si c'est un "bête" string, il est affiché, s'il correspond à une fonction alors la fonction sera exécutée et le résultat retourné. Il en avait besoin pour stocker des fonctions perso dans une base de données...

L'exemple que je donne ici donne:
$name    = "bonjour les amis";  -> myfunc($name): bonjour les amis
$string  = "fctperso('bonjour les amis')";  -> myfunc($string): Vous avez écrit bonjour les amis
$fct1    = "strrev('bonjour les amis')";  -> myfunc($fct1): sima sel ruojnob
$fct2    = "pow(2, 8)";  -> myfunc($fct1): 256

Source

  • <?php
  • function myfunc($param){
  • // on sépare le nom des paramètres
  • preg_match_all("(.[^\(]*)", $param, $sep);
  • // s'il n'y a pas de paramètres ou de (), c'est que ce n'est pas une fonction
  • // on affiche simplement $param
  • if (count($sep[0]) == 1) echo $param;
  • // si c'est une fonction (prédéfinie ou perso, c'est égal)...
  • else{
  • // on récupère les paramètres
  • // ici je ne gère pas le cas où un paramètre
  • // est du type "bonjour l'ami" bikoz -> ' <-
  • $sup = array('\'','"'); // on vire les quotes
  • $fct = substr($sep[0][1],1,-1);
  • $arg = str_replace($sup,'',$fct);
  • $arg = split(",",$arg);
  • // et on exécute la fonction
  • return call_user_func_array($sep[0][0],$arg);
  • }
  • }
  • // fonction perso
  • function fctperso($param) {
  • if ($param == 'a')
  • return 'Vous avez écrit "a"';
  • else
  • return 'Vous avez écrit '.$param;
  • }
  • // une chaine de caractères
  • $name = "bonjour les amis";
  • // une fonction perso
  • $string = "fctperso('bonjour les amis')";
  • // une fonction prédéfinie
  • $fct1 = "strrev('bonjour les amis')";
  • // une autre fonction prédéfinie avec plusieurs paramètres
  • $fct2 = "pow(2, 8)";
  • // le résultat:
  • echo myfunc($name).'<br />'.myfunc($string).'<br />'.myfunc($fct1).'<br />'.myfunc($fct2);
  • ?>
<?php  

function myfunc($param){

	// on sépare le nom des paramètres
	preg_match_all("(.[^\(]*)", $param, $sep);

	// s'il n'y a pas de paramètres ou de (), c'est que ce n'est pas une fonction
	// on affiche simplement $param
	if (count($sep[0]) == 1) echo $param;

	// si c'est une fonction (prédéfinie ou perso, c'est égal)...
	else{

		// on récupère les paramètres
		// ici je ne gère pas le cas où un paramètre
		// est du type "bonjour l'ami" bikoz -> ' <-
		$sup = array('\'','"'); // on vire les quotes
		$fct = substr($sep[0][1],1,-1);
		$arg = str_replace($sup,'',$fct);
		$arg = split(",",$arg);
				
		// et on exécute la fonction
		return call_user_func_array($sep[0][0],$arg);
	}

}

// fonction perso
function fctperso($param) { 
   	if ($param == 'a') 
      		return 'Vous avez écrit "a"'; 
   	else  
      		return 'Vous avez écrit '.$param; 
	} 

// une chaine de caractères
$name    = "bonjour les amis";  
// une fonction perso
$string  = "fctperso('bonjour les amis')";  
// une fonction prédéfinie
$fct1    = "strrev('bonjour les amis')";
// une autre fonction prédéfinie avec plusieurs paramètres
$fct2    = "pow(2, 8)";

// le résultat: 
echo myfunc($name).'<br />'.myfunc($string).'<br />'.myfunc($fct1).'<br />'.myfunc($fct2);

?> 

 Conclusion

Voilà... et le premier qui me sort le même code en 2 lignes, je le frappe ;)


 Historique

20 août 2005 10:22:02 :
petite erreur syntaxique corrigée

 Sources du même auteur

Source avec Zip Source avec une capture EXÉCUTER UN SCRIPT AU-DELÀ DU TIMEOUT DE PHP
Source avec une capture SAUVEGARDE AUTOMATISÉE DE VOS BASES DE DONNÉES
SAVOIR QUI CONNAÎT QUI DANS UN FORUM/CHAT/...
Source avec une capture CACHER UNE SIGNATURE DANS UNE IMAGE
NOUVEAUX MESSAGES SUR YAHOO MAIL

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

 Sources en rapport avec celle ci

CLEF POUR EAN 13 ET 14 par RaftY
Source avec Zip FONCTION PHP POUR REDIMENSIONNER UNE IMAGE ET UPLOADER DANS ... par GstJasmin
FONCTION QUI VÉRIFIE SI L'ARGUMENT EST UN NOMBRE PREMIER par darkelda
Source avec Zip Source avec une capture LOGGER LE TEMPS D'EXÉCUTION DE VOS FONCTIONS PHP par djroulo
FONCTION POUR UTILISER BIT.LY par Rem974

Commentaires et avis

Commentaire de Elektordi le 20/08/2005 12:49:38

>Voilà... et le premier qui me sort le même code en 2 lignes, je le frappe ;)

Dommage... Voila le même code en UNE ligne !!!

$name = "bonjour les amis"; -> eval($name): bonjour les amis
$string = "fctperso('bonjour les amis')"; -> eval($string): Vous avez écrit bonjour les amis
$fct1 = "strrev('bonjour les amis')"; -> eval($fct1): sima sel ruojnob
$fct2 = "pow(2, 8)"; -> eval($fct1): 256

Plus d'infos: http://www.nexen.net/docs/php/annotee/function.eval.php

Commentaire de malik7934 le 20/08/2005 13:00:57

Nah, pas d'accord, primo eval($name) par exemple va te retourner une erreur, ensuite si je me fie à l'exemple sur php.net:

<?php  

$name = "bonjour les amis";
eval( "\$name = \"$name\";" );
echo $name;
echo '<br />';

$string = "fctperso('bonjour les amis')";
eval( "\$tring = \"$string\";" );
echo $string;
echo '<br />';

$fct1 = "strrev('bonjour les amis')";
eval( "\$fct1 = \"$fct1\";" );
echo $fct1;
echo '<br />';
echo '<br />';

$fct2 = "pow(2, 8)";
eval( "\$fct2 = \"$fct2\";" );
echo $fct2;
echo '<br />';

?>
va me donner
bonjour les amis
fctperso('bonjour les amis')
strrev('bonjour les amis')
pow(2, 8)

et non pas le résultat des fonctions.
Hehe... j'avais d'ailleurs commencé par essayer avec eval... t'as essayé ce que tu disais avant de poster? Peut-être que je ne sais pas employer eval de la bonne manière...

Commentaire de Elektordi le 20/08/2005 13:14:29

Oui, j'ai déjà utilisé eval...

Et si tu enlevait les guillemets:

eval( "\$fct1 = $fct1;" );
ou
eval( "\$fct1 = ".$fct1.";" );

Quand au $name, c'est car ds ta fonction tu as rajouté "if (count($sep[0]) == 1) echo $param;", mais bon ca peut s'arranger tout en utilisant eval!

Commentaire de malik7934 le 20/08/2005 13:26:47

J'ai testé tes deux propositions. La deuxième retourne une erreur, mais la première va:

$fct1 = "strrev('bonjour les amis')";
eval( "\$fct1 = $fct1;" );
echo $fct1;

cela donne bien "sima sel ruojnob"... well... je crois bien que je l'ai dans l'os!

Ben voilà, touché coulé le malik7934!

Commentaire de GiUsTiNo le 21/08/2005 23:27:43

le plus facile est de mettre directement le code php dans la fonction eval() pour pas chipoter avec les slash/guillemets... Personnelement, j'ai utilisé cette technique, mes pages étant en base de données, je les récupérais avec eval() (si code php il y avait => avec le html, cela retourne une erreur, bien sur :p)

Bonne continuation

Commentaire de malik7934 le 23/08/2005 09:46:01

Hehe, en reflechissant, j'ai quand meme compris ce qui coincait avec eval...
<?php
$fct1 = "bonjour les amis";
eval( "\$fct1 = $fct1;" );
echo $fct1;
?>
ca, ca va donner une erreur (parse error, unexpected T_STRING). Bien sur $fct1 = "'bonjour les amis'" est la solution mais dans le cas present, celui qui m'a demande la fct ne peux pas changer le contenu de la base de donnees...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

calcul du temps d'exécution [ par YEBOKOLO ] je cherchais à vérifier un code pour calculer le temps d'exécution d'une page ou d'une requête (sans utiliser un code très ou trop compliqué) et je n' Exécution d'un executable (Octave) en PHP [ par chiyo420 ] Bonjour à tous ! Je suis débutante en php et j'ai besoin de vos lumières. Cela fait depuis quelques jours que je cherche en vain une solution à mon p fonction exec et argument [ par chgall2 ] bonjour a tous, je voudrais executer un script shell depuis php et j'ai besoin de vos lumières dans mon code php: exec("sudo /root/scripts/ajout.sh Fonction pour obtenir une couleur en héxa [ par lilj ] Bonjour, je voudrais savoir s'il existe une fonction qui retourne une couleur en hexadécimal de façon aléatoire ?? Merci à vous, Cartes colorées [ par meteo59223 ] Bonsoir à tous, Voilà, je suis passionné de météo et j'aimerai bien pouvoir faire mes propres cartes de température, vent etc ... Colorées en fonctio Listé déroulante en fonction d'une liste de point [ par astuces_jeux ] Bonjour à tous, Le script que je vais vous demander va sûrement vous paraître simple et bizarre, pourtant.. J'ai mis à mes membre un système de point Comment réagit la fonction mail() ? [ par NEO III ] Bonjour, Pour un de mes scripts, j'utilise la fonction mail() de php. L'adresse du destinataire est entrée par le destinataire lui-même dans un formu Appel de Fonction JavaScript avec variable php [ par DCT_Jones ] Bonjour tout le monde, Me dites pas que c'est impossible j'y crois pas. Je voudrais appeler une de mes fonction JS en mettant en paramètre une varia php & ODBC construction de requête en fonction des variables [ par Razily ] Bonjour à tous ; mon stage évolue et là on me demande de créer des formulaires contenant des cases à cocher et des listes déroulantes et et de créer problème avec joomla [ par henni20 ] bjr tou l monde je prépare mon projet fin d'étude je doit créer un site web pour la gestion du département. il mon imposer l'utilisation du cms jooml


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales