kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 23 déc. 2007 à 15:08
Moi au risque de faire mon rabat joie je ne vois pas l'intérêt d'encapsuler une condition dans une fonction... ça alourdi le code pour rien... et ce encore plus avec l'opérateur ternaire... l'intérêt du ifsetor() est qu'il sera (bien que ce ne soit pas encore fait) natif à php donc rapide à l'exécution... après, pour gérer une portabilité descendante, pourquoi pas mais je ne suis pas convaincu... .. .
@ tchaOo°
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 déc. 2007 à 19:47
Je note quand même, même si je suis d'accord avec Neige : ça n'a pas sa place ici, ce devrait être sur codyx.org.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 déc. 2007 à 19:46
Hello,
je pense que par son interrogation pour savoir si le function_exists() suffira, il parlait plutôt de la façon d'écrire la fonction. Est-ce que la fonction php6 s'appellera bien "ifsetor" ;-)
Ca, tu verras bien.
C'est intéressant...que ce soit plus lisible que l'opérateur ternaire, pas de doute? Plus rapide, pas à l'exécution vu que tu utilises aussi l'opérateur ternaire, comme on l'utiliserait sans ta fonction; plus rapide à l'écriture, ça oui.
J'ai réflêchi à un truc : avec l'opérateur ternaire, on peut gérer plusieurs conditions. Pas avec ta fonction (en tous cas, pas en "natif").
Avec func_get_args(), ça marche, sauf que si les $set passés n'existent pas, on a évidemment une erreur. Ca obligerait à appeler ta fonction en masquant les erreurs...burk.
Bref, je propose une petite modification, avec 2 versions. Une générant des erreurs (si si!! j'ose...), une en utilisant un tableau. Les deux ont un inconvénient : la 1ère nécessite un appel avec @, l'autre de passer un tableau dont les variables sopnt des références...c'est moche dans les deux cas. Mais c'est à réflêchir. Je pense quand même qu'en php pur, on ne fera pas mieux...
L'autre truc, c'est que je n'utilise pas d'opérateur ternaire : il est plus lent qu'un if...else. Si on garde ta fonction telle quelle, je pense qu'il faut virer l'opérateur ternaire, ce sera tjrs plus rapide.
<?php
/*
if(!function_exists('ifsetor')){//En espérant que ca suffise pour la migration a venir
function ifsetor(&$var){
$iCpt = 0;while(false !($mArg (func_get_arg($iCpt)))) {
if(isset($mArg)) {
return $mArg;
}
$iCpt++;
}
}
}
$a = @ifsetor($a, $b, $c, 5);
echo $a;
*/
if(!function_exists('ifsetor')){//En espérant que ca suffise pour la migration a venir
function ifsetor(&$var, $aArgs){
if(isset($var)) {
return $var;
}
foreach($aArgs as $mArg) {
if(isset($mArg)) {
return $mArg;
}
}
}
}
$a = ifsetor($a, array(&$b, &$c, 5));
echo $a;
?>
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 20 déc. 2007 à 16:44
Ok... J'avais zappé qu'il se passait ça. ^^
cedriclomb
Messages postés275Date d'inscriptionsamedi 19 novembre 2005StatutMembreDernière intervention27 avril 20101 20 déc. 2007 à 16:35
Répondre enlève le & et met toi en E_ALL tu vas comprendre
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 20 déc. 2007 à 16:34
Salut,
Ce serait un snippet, plutôt qu'une source. Mais c'est un détail.
Sinon, oui, la vérification avec function_exists() suffit.
Enfin, si la fonction doit retourner une valeur, inutile de passer l'argument par référence, puisque la valeur n'est pas modifiée, mais seulement lue.
Sinon, merci de m'avoir fait découvrir cette future nouvelle fonction, qui va effectivement faciliter la lecture (et l'écriture) de ces assignations de variables.
23 déc. 2007 à 15:08
@ tchaOo°
20 déc. 2007 à 19:47
20 déc. 2007 à 19:46
je pense que par son interrogation pour savoir si le function_exists() suffira, il parlait plutôt de la façon d'écrire la fonction. Est-ce que la fonction php6 s'appellera bien "ifsetor" ;-)
Ca, tu verras bien.
C'est intéressant...que ce soit plus lisible que l'opérateur ternaire, pas de doute? Plus rapide, pas à l'exécution vu que tu utilises aussi l'opérateur ternaire, comme on l'utiliserait sans ta fonction; plus rapide à l'écriture, ça oui.
J'ai réflêchi à un truc : avec l'opérateur ternaire, on peut gérer plusieurs conditions. Pas avec ta fonction (en tous cas, pas en "natif").
Avec func_get_args(), ça marche, sauf que si les $set passés n'existent pas, on a évidemment une erreur. Ca obligerait à appeler ta fonction en masquant les erreurs...burk.
Bref, je propose une petite modification, avec 2 versions. Une générant des erreurs (si si!! j'ose...), une en utilisant un tableau. Les deux ont un inconvénient : la 1ère nécessite un appel avec @, l'autre de passer un tableau dont les variables sopnt des références...c'est moche dans les deux cas. Mais c'est à réflêchir. Je pense quand même qu'en php pur, on ne fera pas mieux...
L'autre truc, c'est que je n'utilise pas d'opérateur ternaire : il est plus lent qu'un if...else. Si on garde ta fonction telle quelle, je pense qu'il faut virer l'opérateur ternaire, ce sera tjrs plus rapide.
<?php
/*
if(!function_exists('ifsetor')){//En espérant que ca suffise pour la migration a venir
function ifsetor(&$var){
$iCpt = 0;while(false !($mArg (func_get_arg($iCpt)))) {
if(isset($mArg)) {
return $mArg;
}
$iCpt++;
}
}
}
$a = @ifsetor($a, $b, $c, 5);
echo $a;
*/
if(!function_exists('ifsetor')){//En espérant que ca suffise pour la migration a venir
function ifsetor(&$var, $aArgs){
if(isset($var)) {
return $var;
}
foreach($aArgs as $mArg) {
if(isset($mArg)) {
return $mArg;
}
}
}
}
$a = ifsetor($a, array(&$b, &$c, 5));
echo $a;
?>
20 déc. 2007 à 16:44
20 déc. 2007 à 16:35
20 déc. 2007 à 16:34
Ce serait un snippet, plutôt qu'une source. Mais c'est un détail.
Sinon, oui, la vérification avec function_exists() suffit.
Enfin, si la fonction doit retourner une valeur, inutile de passer l'argument par référence, puisque la valeur n'est pas modifiée, mais seulement lue.
Sinon, merci de m'avoir fait découvrir cette future nouvelle fonction, qui va effectivement faciliter la lecture (et l'écriture) de ces assignations de variables.