Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1442 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Fonction. Cas spécial avec arguments facultatifs. Que faire ? :/

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction. Cas spécial avec arguments facultatifs. Que faire ? :/

n°1206263
Gat$
http://www.wowteamfinder.com
Posté le 23-09-2005 à 20:54:48  profilanswer
 

Bonjour,
 
il ya un truc que je n'arrive pas a faire, et je ne comprend meme pas pourquoi ca n'est pas possible :/
 
VOila mon code :
 

Code :
  1. <?php
  2. function foo($a=1, $b=2, $c=3) {
  3. return $a.'-'.$b.'-'.$c;
  4. }
  5. echo foo(5); // Affiche 5-2-3
  6. echo foo(NULL, 4, 5); // Affiche -4-5    et je voudrais que ca affiche 1-4-5
  7. ?>


 
Donc on voit que j'utilise des arguments facultatifs.
 
Et malgrés que l'ont passé la valeur NULL a ne prend pas sa valeur par defaut.  
 
Le seul moment ou a prend sa valeur par defaut c si on fait  
 
echo foo();
 
par exemple !
 
Mais ca pose problème quand on veut definir une valeur differente aux arguments qui suivent ! On ne peut pas faire foo( , 5, 6); --> parse error
 
Donc voila si quelqu'un a une solution a ce prob ?  
 
Merci ^^


---------------
Recherche de partenaires pvp dans World of Warcraft :: http://www.wowteamfinder.com
mood
Publicité
Posté le 23-09-2005 à 20:54:48  profilanswer
 

n°1206272
masklinn
í dag viðrar vel til loftárása
Posté le 23-09-2005 à 21:44:01  profilanswer
 

Je ne crois pas que PHP permette de sauter des arguments, c'est comme en C/C++, tu charges les arguments linéairement et les arguments par défaut sont à la fin.
 
En python, c'est possible par contre [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1206284
Gat$
http://www.wowteamfinder.com
Posté le 23-09-2005 à 22:05:54  profilanswer
 

Arf c'est con car car les arguments vide peuvent dans mon cas peuvent varier donc peut importe l'ordre..., c lourd, bon ben va falloir coder a la porc tant pis :D
 
Merci pour ta réponse entk
 
A+


---------------
Recherche de partenaires pvp dans World of Warcraft :: http://www.wowteamfinder.com
n°1206288
masklinn
í dag viðrar vel til loftárása
Posté le 23-09-2005 à 22:10:11  profilanswer
 

au lieu de passer des arguments normaux, essaie en passant un array ;)
 
genre au lieu d'appeler foo(a, b, c) tu appelles

foo(array("a"=>a,"b"=>b,"c"=>c))


 
et dans "foo", tu testes si les clés "a", "b" et "c" sont présentes et tu réagis en concéquence.
 
C'est pas vraiment propre, mais bon [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1206293
Gat$
http://www.wowteamfinder.com
Posté le 23-09-2005 à 22:15:29  profilanswer
 

Salut oui il ya plein de possibilités pour contourner mais ca reste du code un peu trop porc a mon gout, enfin tant pis :) si ya pas d'autres moyen  
 
^^
 
Merci quand même


---------------
Recherche de partenaires pvp dans World of Warcraft :: http://www.wowteamfinder.com
n°1206294
sielfried
Posté le 23-09-2005 à 22:15:49  profilanswer
 

Un truc comme ça :
 

Code :
  1. function foo($arr = array(1, 2, 3)) {   
  2. $default = array(1, 2, 3);
  3. for ($i = 0; $i < 3; $i++) {
  4.  if ($arr[$i] == null) {
  5.   $arr[$i] = $default[$i];
  6.  }
  7. }
  8. echo $arr[0], '-', $arr[1], '-', $arr[2];
  9. }


 
Mais c'est si vraiment y'a pas le choix.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1206300
masklinn
í dag viðrar vel til loftárása
Posté le 23-09-2005 à 22:28:09  profilanswer
 

il n'y a pas d'opérateur ternaire en PHP [:petrus dei]
 
(et ton truc ça fonctionne pas, si il donne 2 valeurs sur 3 l'array va être peuplé, donc l'array par défaut ne sera pas utilisé et il l'aura dans le cul)
 
[troll]C'est con quand même, en python il aurait suffit de faire

>>> def foo(a=1, b=2, c=3):
...     return "%d-%d-%d"%(a,b,c)
...
>>> foo(12)
'12-2-3'
>>> foo(b=51)
'1-51-3'
>>> foo(c=13, b=412)
'1-412-13'


 
[/troll]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1206304
sielfried
Posté le 23-09-2005 à 22:32:49  profilanswer
 

masklinn a écrit :

il n'y a pas d'opérateur ternaire en PHP [:petrus dei]


 
Là ça obligerait à tout faire en même temps, affichage et vérification de l'égalité avec null, bof. Surtout si y'avait + de valeurs.
 

Citation :


(et ton truc ça fonctionne pas, si il donne 2 valeurs sur 3 l'array va être peuplé, donc l'array par défaut ne sera pas utilisé et il l'aura dans le cul)


 
Ben ouais faut remplir avec des null.
 
M'enfin c'était que le concept là, après on l'arrange comme on veut. [:spamafote]


Message édité par sielfried le 23-09-2005 à 22:33:34

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1206314
sielfried
Posté le 23-09-2005 à 22:39:36  profilanswer
 

Dtf suffit de rajouter un isset.
 

Code :
  1. function foo($arr = array(1, 2, 3)) {   
  2. $default = array(1, 2, 3);
  3. for ($i = 0; $i < 3; $i++) {
  4.  if (!isset($arr[$i])) {
  5.   $arr[$i] = $default[$i];
  6.  }
  7. }
  8. echo $arr[0], '-', $arr[1], '-', $arr[2];
  9. }


Message édité par sielfried le 24-09-2005 à 16:16:13

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1206482
shakpana
des fois, j'me demande ...
Posté le 24-09-2005 à 14:07:52  profilanswer
 

Gat$ a écrit :

c lourd, bon ben va falloir coder a la porc tant pis :D


boarf, c un ptit peu lourd mais

Code :
  1. function dummy($a=null, $b=null, $c=null){
  2.   if (is_null($a)) $a = 1;
  3.   if (is_null($c)) $b = 2;
  4.   if (is_null($c)) $c = 3;
  5.   return "$a - $b - $c";
  6. }
  7. echo dummy(null, 88, 32);


effectivement, ça fait un peu répétition mais
je trouve pas ça si "porcasse" que ça ;)
 
--
 
Ah oui, au passage :
Masklinn a écrit : "il n'y a pas d'opérateur ternaire en PHP"
??? mais ça alors, qu'est-ce que c'est quoi donc ???

Code :
  1. $foo = isset($bar) ? "bar is set" : "bar is not set";


a+
shakpana

mood
Publicité
Posté le 24-09-2005 à 14:07:52  profilanswer
 

n°1206511
masklinn
í dag viðrar vel til loftárása
Posté le 24-09-2005 à 15:40:25  profilanswer
 

shakpana a écrit :

Masklinn a écrit : "il n'y a pas d'opérateur ternaire en PHP"
??? mais ça alors, qu'est-ce que c'est quoi donc ???


Je crois que t'as raté le fait que c'était une question [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1206514
shakpana
des fois, j'me demande ...
Posté le 24-09-2005 à 15:44:23  profilanswer
 

masklinn a écrit :

Je crois que t'as raté le fait que c'était une question [:petrus75]


héhé, autant pour moi Masklinn ...
n'avait point vu de '?'
:)
 
[edit pour typo]


Message édité par shakpana le 24-09-2005 à 15:45:14
n°1206517
kalex
Posté le 24-09-2005 à 15:51:04  profilanswer
 

shakpana a écrit :

Code :
  1. function dummy($a=null, $b=null, $c=null){
  2.   if (is_null($a)) $a = 1;
  3.   if (is_null($c)) $b = 2;
  4.   if (is_null($c)) $c = 3;
  5.   return "$a - $b - $c";
  6. }
  7. echo dummy(null, 88, 32);


On peut même faire des if(!$a) si on veut faire court.

n°1206519
shakpana
des fois, j'me demande ...
Posté le 24-09-2005 à 15:56:32  profilanswer
 

kalex a écrit :

On peut même faire des if(!$a) si on veut faire court.


moui, mais tu riques d'avoir des soucis si  

Code :
  1. dummy(0,'0', '', false);


mais ça, faut savoir ce qui est acceptable comme paramètres pour la fonction ...
l'interêt est que NULL est plus 'rare' comme parèmetre que '' ou 0 ...
m'enfin ...

n°1206523
kalex
Posté le 24-09-2005 à 16:04:47  profilanswer
 

C'est vrai. J'ai mis ça parce que j'ai une fonction qui ressemble à ça, mais pour des variables str.
 
Sinon, on peut aussi faire $var === NULL. :D

n°1206525
shakpana
des fois, j'me demande ...
Posté le 24-09-2005 à 16:06:40  profilanswer
 

toi, t'aimes pas is_null()  :lol:
--
just kidding, tu as raison on évite de faire appel à une fonction :)


Message édité par shakpana le 24-09-2005 à 16:09:18

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Fonction. Cas spécial avec arguments facultatifs. Que faire ? :/

 

Sujets relatifs
Recuperer plusieurs ROWS SQL avec une fonction PHP ?fonction mail: header From
Clé de produit en fonction d'un nomfonction include et réactualisation
Probleme avec la fonction mail() de PHPEst ce que Online.net à la fonction zip activé - phpinfo inside
comment crée une fonction JavaScript comme .toLowerCase() ? ...declarer une variable de session dans une fonction
Fonction avec 2 variables?[RESOLU] Fonction qui retourne le numero d'un ligne ?? (excel)
Plus de sujets relatifs à : Fonction. Cas spécial avec arguments facultatifs. Que faire ? :/


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR