PHP : fonction iif

Attention, cet article a été déplacé dans les archives, donc le contenu peut ne plus être à jour. A vous de voir 🙂

Voici une fonction que j’utilise beaucoup, et qui pourra peut-être vous rendre service : La fonction iif().
Cette fonction existe dans de nombreux langages, mais pas en PHP.
Une erreur réparée avec cette fonction à copier coller :

function iif($condition,$ok,$nok='') {
	return ($condition ? $ok : $nok);
}

La fonction iif vous permet tout simplement de vérifier une condition à l’intérieur d’une ligne de code.
Exemple :

echo 'Bon '.iif(date('h') < 12,'Matin','Aprem').' à vous';
// Affiche 'Bon Matin à vous' || 'Bon Aprem à vous' selon l'heure de la journée

Vous n'êtes pas obligés de spécifier un résultat si la condition n'est pas respectée.
Si cette fonction ne vous sert pas, je saurais au moins où la retrouver :p

Partager cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

  • Pas mal, à utiliser jusqu’à ce que PHP implémente (enfin) la fonction issetor prévue depuis pfiouuuuu, au moins tout ça !

  • Ne pas réinventer la roue… Les conditions ternaires sont là pour ça ^^

    echo ‘Bon ‘.(date(‘h’) < 12 ? ‘Matin’ : ‘Aprem’).’ à vous’;

  • une autre qui manque a php : le unless de ruby.

    Ps : j’ai un bug d’affichage depuis le e71. Le « votre email » a pas de retour a la ligne. C’est deroutant sur un petit ecran.

  • @Godefroy l’avantage de iif, c’est sa simplicité. Evidemment que c’est une surcouche, mais c’est pour simplifier l’écriture de code dans des scripts où on ne cherche pas la performance, mais la lisibilité 😉

    @Damien : sur la version mobile ? Arf, je corrige ça, merci.

  • Franchement, la différence de syntaxe entre iif(condition, succes, echec) et (condition?succes:echec) ne me semble pas déroutante… Niveau lisibilité, c’est kif-kif (sauf que la syntaxe ternaire doit être plus répandue)

  • On parle ici d’une frontière entre codeurs expérimentés, et ceux qui ne veulent pas se prendre la tête.
    Va expliquer la syntaxe ternaire à un débutant, tu vas voir le nombre de fautes. Alors qu’un iif, comme dans d’autres langages … 😉

  • Je trouve aussi que la condition ternaire n’est rien de compliquée et en plus existe partout, du coup c’est bête de perdre ce millième de centième de seconde à l’interprétation pour l’appel à la fonction iif ^^.

    @Palleas: si le unless de Ruby c’est le même que celui de Perl, c’est juste un « if not » en fait… « unless (a) » est équivalent à « if (!a) » par exemple. Je vois pas trop trop l’utilité parce que même niveau lisibilité ça ne change pas grand chose…

  • L’idée est bonne, mais comme la plupart, je voterai en faveur des conditions ternaires nativement offertes par le langage. Aux débutants qui pourraient être rebutés par la syntaxe, je conseillerai plutôt d’utiliser le if/else classique. Avec le temps, le réflexe ternaire viendra de lui-même 😉

  • @p4bl0 php ne fait pas trop dans l’indispensable uniquement. Sinon, ils n’implémenteraient pas goto 😉

    Le unless rends le code BEAUCOUP plus lisible quand on peut faire des choses comme :

    return false unless maVar == true

  • Une précision gratuite :

    Cette fonction ne s’adresse évidemment pas aux développeurs confirmés, mais aux débutants, qui ont besoin d’une structure facilement mémorisable.

    Je suis d’accord sur le fait que la structure ternaire doit être privilégiée dans les cas où iif() est utile. Mais c’est la raison d’être de iif(), qui n’est qu’une sorte d’alias simplifiant l’usage de la structure ternaire 🙂

    C’est assez visible, d’ailleurs, vu qu’elle utilise la structure ternaire pour fonctionner 😉

  • Oui, c’est une surcouche, et je comprends que tu aies tes petites habitudes et donc que ça peut te simplifier la vie.
    Mais je ne sais pas si c’est une bonne idée d’apprendre ça aux débutant : les débutants ont tendance à constamment réinventer la roue, et c’est un exemple qui leur donne raison, alors que tu ne me contrediras pas sur le fait qu’une syntaxe native est toujours plus efficace (en terme de compréhension quand elle n’est pas plus compliquée, et en terme de rapidité).

  • « en terme de compréhension quand elle n’est pas plus compliquée, et en terme de rapidité »
    Je ne suis absolument pas d’accord là-dessus. Les conditions ternaires ne sont pas forcément évidentes à apprendre au début. Le iif peut être une bonne solution pour apprendre de manière graduelle et ne pas avoir toutes les difficultés d’un coup.

    Quant à la rapidité, ce n’est pas ce genre de broutilles qui ralentissent une application.
    Il faut optimiser son application. Mais de manière intelligente. Et ce genre d’optimisations, c’est surtout de la perte de temps qu’autre chose.

  • Un perte de temps ? Absolument pas, si on code comme ça dès le début.
    Par contre la fonction iif prends 3 lignes de code à définir. Ce n’est peut-être que 3 lignes, mais si tu commences à raisonner comme ça pour toutes tes « astuces », tu t’en sortiras plus…
    Et je ne pas en quoi la condition ternaire est compliqué à apprendre.
    Enfin bref, ça ne me gène pas que tu l’utilise, mais mieux vaut apprendre les syntaxes natives et standards aux débutants.

  • Le développeur aime gagner du temps, d’où la fonction iif de @Darklg. Cependant, si vous penchez pour les conditions ternaires et que vous évoluez sous TextMate (copain \o/), voici un petit snippet pratique (associé à la clé iif et à un raccourci clavier) :

    (${1:${TM_SELECTED_TEXT:condition}}) ? ${2:’${3:code…}’} : ${4:’${5:code…}’}$0

    Version lisible : http://pastie.textmate.org/pastes/331807

    P.S. : J’ai une préférence pour la condition ternaire, pour les raisons évoquées par @Godefroy.