IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonctionnement d'une méthode


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kanzarih
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2002
    Messages : 327
    Par défaut Fonctionnement d'une méthode
    Bonsoir a tous

    Après avoir effectué des recherches sur internet, j'ai trouvé un code qui contient cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public function display_error($message){
    			if(func_num_args()>1){
    				$arguments = func_get_args();
    				$command = "\$message = sprintf(\$message, ";
    				for ( $i = 1; $i < sizeof($arguments); $i++ ){
    					$command .= "\$arguments[".$i."], ";
    				}
    				$command = eregi_replace(", $", ");", $command);
    				eval($command);
    			}
    			echo "<b>phpXML error:</b> ".$message;
    			exit;
    		}
    est ce quelqu'un peut m'aider a comprendre son fonctionnement?

    ce que j'ai déjà compris :

    - if(func_num_args()>1) : vérifier si la méthode a été appeler avec un nombre d'argument supérieur a 1.
    - $arguments = func_get_args(); : prendre les arguments et les mettre dans le tableau $arguments.
    - $command = "\$message = sprintf(\$message, "; : !!!!!!!
    - for ( $i = 1; $i < sizeof($arguments); $i++ ) : parcourir la liste des arguments.
    - $command .= "\$arguments[".$i."], "; : ajouter les arguments un par un dans la variable $command.
    - $command = eregi_replace(", $", ");", $command); : !!!!!!!!!!!!!!!!
    - eval($command); : executer le code PHP de la variable $command.
    - echo "<b>phpXML error:</b> ".$message; : un echo classique.
    - exit; : stopper l'exécution du script.

    Donc ce que j'ai pas compris c'est :
    $command = "\$message = sprintf(\$message, ";

    et

    $command = eregi_replace(", $", ");", $command);

    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Bah les lignes que tu as pas comprises permettent de créer un sprintf() avec un nombre d'arguments indéfini, en considérant sans doute que $message est une chaine capable de prendre en compte ces arguments.

    C'était une manière astucieuse de faire avant l'apparition de vsprintf.

  3. #3
    Membre émérite Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $command = "\$message = sprintf(\$message, ";
    à l'issue de cette ligne,
    la variable $command contient la chaîne de caractères :
    "$message = sprintf($message, ".
    A l'issue de la boucle sur les arguments,
    $command s'est allongée, par exemple s'il y a deux arguments supplémentaires :
    "$message = sprintf($message, $arguments[1], $arguments[2], ".

    Et pour terminer, la construction de $command :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $command = eregi_replace(", $", ");", $command);
    remplace le ", " à la fin de $command par ");".

    On a donc maintenant $command qui contient :
    "$message = sprintf($message, $arguments[1], $arguments[2]);".
    ne reste plus qu'à l'exécuter avec le eval.

    Donc si on a appelé
    dislplay_error('Il y a %d singes dans le %s',5,'bananier')
    après eval(), on aura $message = "Il y a 5 singes dans le bananier".


    Fred

  4. #4
    Membre éclairé Avatar de kanzarih
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2002
    Messages : 327
    Par défaut
    Waw merci c'est claire.
    Merci beacoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel et test d'une méthode ne fonctionnent pas (type not found)
    Par Faluchard dans le forum Général Java
    Réponses: 2
    Dernier message: 30/05/2010, 16h05
  2. Réponses: 8
    Dernier message: 14/01/2010, 18h14
  3. draggable: ne fonctionne via une méthode POST
    Par nims dans le forum jQuery
    Réponses: 8
    Dernier message: 30/11/2009, 11h51
  4. Réponses: 2
    Dernier message: 01/05/2007, 18h50
  5. [AJAX] Méthode sous Ajax qui ne fonctionne qu'une fois?
    Par patrice419 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2007, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo