IFSETOR POUR PHP5

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 20 déc. 2007 à 16:34
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 23 déc. 2007 à 15:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45141-ifsetor-pour-php5

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 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és 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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és 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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és 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 déc. 2007 à 16:44
Ok... J'avais zappé qu'il se passait ça. ^^
cedriclomb Messages postés 275 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 27 avril 2010 1
20 déc. 2007 à 16:35
Répondre enlève le & et met toi en E_ALL tu vas comprendre
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
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.
Rejoignez-nous