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 :

N'envoyer que certains arguments prédéfinis


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Par défaut N'envoyer que certains arguments prédéfinis
    Bonjour à tous,

    Je suis en train de coder en PHP et je me rend compte que je ne sais pas s'il est possible d'envoyer que certain arguments !

    Pour le thread, imaginons que je travaille sur une fonction qui gèrerait des images :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    function image($nom='noname', $type='png')
    {
         // content
         echo $nom.".".$type."<br/>";
    }
    ?>
    Le principe maintenant serait de lancer la fonction en définissant $type mais en laissant $nom par defaut..

    J'ai essayer comme d'autre langage à lancer la fonction de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    image($type="bmp");
    ?>

    Mais PHP le comprend en créant une variable $type dans ce bloc, et envoit la valeur (qui sera interprété par le premier argument)...

    Un petit exemple pour comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    image($type="bmp");
    echo $type;
    ?>
    Sortie :
    bmp.png
    bmp

    Quelqu'un sait si c'est possible ??! Je me dis que PHP à intégré une autre façon pour faire ça.

    Pour essayer de faire un rendu à peut près identique je pensais ne mettre qu'un seul argument [Array] avec des clés bien défini puis testé les valeurs rentrés, les autres seront rajouté avec les valeur par défaut.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    function image($arg = array() )  //  si aucun argument on prend un tableau vide
    {
         // valeur par defaut
     
         $defaut = array( 'nom'=>'noname', 
                          'type'=>'png');     // liste des valeurs par defaut
     
         $array = array_merge($defaut, $arg);
     
         // content
     
         echo $array['nom'].".".$array['type']."<br/>";
    }
     
    image();
    image(array('type'=>'bmp'));
    image(array('nom'=>'truc'));
    image(array('nom'=>'truc', 'type'=>'bmp'));
    ?>
    Sortie :
    noname.png
    noname.bmp
    truc.png
    truc.bmp
    Quelqu'un aurait une autre idée ? Ou une meilleur solution ?

    Merci à tous !

  2. #2
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut Les paramètres par défaut doivent être placés en dernier
    Bonjour CactO_o's,

    Selon le manuel PHP les paramètres par défaut doivent être placés en dernier.
    Dans ton cas, nous avons deux paramètres par défaut. Seul le second sera considéré par PHP comme un vrai argument par défaut. Dons, si l'on veut faire varier $type, $nom doit-être le dernier argument.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    function image($type='png', $nom='noname')
    {
         // content
        if(empty($type)) {  //pour appeler la fonction sans argument
    	 $type="png";
         }
         echo $nom.".".$type."<br/>";
    }
    ?>
    Pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    	$type="jpg";
    	$nom = "monNom";
    	image($type, $nom);
    	image();    //D'où le test du empty($type) 
    	image($type);
    	image($nom);  //Attention n'affecte que le type  donc non valide ligne 4
    	image("", $nom);  // pour réellement passer le nom avec le type à vide	
    ?>
    Résultat :

    monNom.jpg
    noname.png
    noname.jpg
    noname.monNom
    monNom.png
    oups petit souci pour l'affichage de la citation.

    Cordialement,
    wmahann

  3. #3
    Membre confirmé Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Par défaut
    Merci wmahann pour ta réponse, mais le problème n'est pas là ^^

    Dans cette exemple à deux args la solutions est assez simple, mais la fonction n'est ici qu'un exemple... Dans mon cas j'ai de très nombreux arguments et le choix des args à envoyer est très différent en fonction de la sortie voulu...

    Je ne peux pas me permettre de mettre les valeurs par défaut dans le prototype de la fonction et dans tous les tests empty...
    Je me voix encore moins envoyer dans tous mes appelle de fonction, tous les arguments avec leur valeurs par défaut (je n'imagine pas le travail en cas de changement de valeur par défaut...)

    Je penses donc que je vais utilisé la technique avec les [Array] que j'ai nommé plus haut..

    Je suis toujours à la recherche de solutions, si quelqu'un d'autre à une idée


    PS : Pour les citations il faut utiliser les balise [ QUOTE ] [ /QUOTE ] et non [Citation] [/Citation]

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Par défaut
    Va regarder http://fr.php.net/manual/fr/function.func-get-args.php

    Exemple je veux utiliser strpos($str_haystack, $str_needle), mais je veux pouvoir utiliser plusieurs $str_needle :
    strpos($str_haystack, $str_needle1, $str_needle2, $str_needle3, ..)

    Alors func-get-args() règle tous mes problèmes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    function multi_strpos() //$str_haystack, $str_needle1, $str_needle2, ..
    {
    	$arg_list=func_get_args();
    	if (count($arg_list)<2) return false;
    	$str_haystack=array_shift($arg_list);
    	foreach ($arg_list as $str_needle)
    	{
    		$pos = strpos($str_haystack, $str_needle);
    		if ($pos !== false) return $pos;
    	}
    	return false;
    }
    ?>

  5. #5
    Membre confirmé Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Par défaut
    Merci pour ta réponse gomodo mais j'ai utilisé ma technique qui répond plus à ma demande.. Avec ta technique je ne pourrais pas envoyé l'argument $needle3 sans envoyé $needle1 et $needle2...

    Alors qu'avec ce code c'est possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    function image($arg = array() )  //  si aucun argument on prend un tableau vide
    {
         // valeur par defaut
     
         $defaut = array( 'nom'=>'noname', 
                          'type'=>'png');     // liste des valeurs par defaut
     
         $array = array_merge($defaut, $arg);
     
         // content
     
         echo $array['nom'].".".$array['type']."<br/>";
    }
     
    image();
    image(array('type'=>'bmp'));
    image(array('nom'=>'truc'));
    image(array('nom'=>'truc', 'type'=>'bmp'));
    ?>

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

Discussions similaires

  1. Réponses: 35
    Dernier message: 18/05/2006, 18h30
  2. Réponses: 17
    Dernier message: 21/12/2005, 00h35
  3. Ne voire que certaines extensions et masquer les autres
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 04/12/2005, 23h04
  4. [Oracle 8i] ne garder que certains enregistrements (COUNT ?)
    Par delphim dans le forum Langage SQL
    Réponses: 13
    Dernier message: 23/02/2005, 14h30
  5. 1 Table, Des doublons, ne rertenir que certains d'entre eux
    Par Dragano dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/01/2005, 12h06

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