7
votes

Le moyen le plus court d'attribuer une valeur par défaut à une variable?

J'ai maintenant maintenant pour utiliser une valeur de cookie si vous n'existe pas autrement, utilisez une valeur par défaut:

$default_carat_min = $_COOKIE["diamond-search_caratMin"] ? $_COOKIE["diamond-search_caratMin"] : "0.25";


1 commentaires

Je ne sais pas php, mais vous pouvez sûrement écrire une fonction d'assistance telle que GetcookieRefault, appelé comme: par défaut_carat_min = getcookieordfault ("0.25")


6 Réponses :


25
votes

php 5.3 Ajout d'un court formulaire pour le Opérateur ternaire : xxx

qui évalue au côté gauche si le côté gauche est vrai et évalue au côté droit autrement.

avant 5,3 Cependant, vous devez utiliser la forme longue.


6 commentaires

Bon sang, je viens de manquer! @ 5.2.14


Notez que ce code lancera une erreur (e_notice doit être exactement) lorsque le cookie n'existe pas.


peut facilement être corrigé avec émetteur ()


@CROZIN vrai, mais tous les exemples de l'OP vont-ils. Les avis ne sont pas des erreurs, au fait.


$ def = (Isset ($ _ cookie ['"diamant']))? $ _Cookie ['"diamant']: 0,25;


Ils ne sont pas des erreurs que parce que PHP est la preuve du PHP - ils devraient être. ;)



2
votes

Je pense que la question est subjective. Personnellement, je pense qu'il vaut mieux être verbeux et il n'y a rien de mal avec votre première forme car il est complètement évident ce que votre code fait.

Ce n'est pas comme si vous êtes limité sur le nombre de lignes ou de taille que vous pouvez utiliser. Vous sauvez vraiment beaucoup en économisant quelques coups de clé?

Si c'est vraiment un problème, essayez peut-être de réduire le nombre de variables que vous utilisez en premier lieu serait une meilleure solution


4 commentaires

Ce ne serait subjectif que si j'avais demandé quelle méthode était meilleure. Mais il n'y a rien de subjectif à propos de la longueur des personnages d'une manière par rapport à une autre.


Oui il y a. Le fait que la longueur n'aurait pas d'importance, codez la "lisibilité" plus importante que d'économiser 50 caractères.


@Galen, si je devrais ou non le faire peut être une question subjective. Mais ce n'est pas la question que j'ai posée. Si j'avais demandé cela, que les gens ne pouvaient se disputer toute la journée. Mais j'ai demandé quel chemin était le plus court. Cela a une réponse qui peut être mesurée. Il n'y a pas de débat sur la question de savoir si une réponse a plus de caractères qu'une autre réponse.


@Galan, je ne veux pas sembler impoli, mais je pense que vous êtes. À mon avis 20, des affectations de ligne simples courtes dans une séquence sont plus faciles à lire que 20 si déclarations. C'est la raison même pour laquelle je voulais faire cela, était de rendre le code plus facile à suivre. Cependant, je pensais que le code est plus facile à lire de cette façon est subjectif et vous me dites qu'il est plus facile de lire une autre manière est également subjective. Je n'ai pas commencé ce fil pour une conversation subjective sur laquelle est le meilleur. J'ai commencé à avoir une réponse concrète sur la façon de l'écrire comme je me sens plus facile à comprendre.



4
votes

Vous pouvez utiliser une fonction:

function set_default(&$var, $default) {
    return isset($var) ? $var : $default;
}

$default_carat_min = set_default($_COOKIE["diamond-search_caratMin"], "0.25");


0 commentaires

2
votes

Je suis d'accord avec la réponse de Cfreak. Je préférerais que le code soit "évident".

Pour ajouter à cela, bien que vous ne voulez pas avoir à rechercher votre code pour chaque instance de 0.25 (ou d'autres valeurs), donc je recommande Création d'un fichier de configuration Si vous n'en avez pas un et l'ajout de cette ... xxx

inclure ensuite le fichier de configuration et xxx

Vous pouvez également utiliser l'opérateur ternaire xxx


1 commentaires

+1 Pour la recommandation d'utiliser un fichier de configuration pour définir les valeurs par défaut.



0
votes

La question contenait un indice que de nombreuses variables devaient être vérifiées pour s'assurer qu'ils avaient une valeur par défaut et que personne ne l'a fait référence. C'est ce que je vais faire maintenant:

Vous pouvez définir une gamme de valeurs par défaut d'abord et commodément en boucle à travers cela. Cet exemple vérifie simplement le GLOBAL $ _COOKIE GLOBAL: P>

$defaults = Array(
    '_COOKIE' => Array(
        'diamond-search_caratMin' => "0.25"
        , 'diamond-search_caratMax' => "2.00"
    )
    , 'myOtherArray' => Array(
        'value_1' => 10
        , 'value_2' => 20
    )
    , 'myString' => 'Hello'
    , 'myFloat' => 1.0
);
foreach ($defaults as $vk => $vv) {
    if (is_array($vv)) {
        if (!isset($$vk)) {
            $$vk = Array();
        }
        foreach ($vv as $dk => $dv) {
            if (!isset($$vk[$dk])) {
                $$vk[$dk] = $dv;
            }
        }
    } else {
        if(!isset($$vk)) {
            $$vk=$vv;
        }
    }
}


0 commentaires

3
votes

Pour éviter l'avis électronique Utilisation:

$default_carat_min = @$_COOKIE["diamond-search_caratMin"] ?: "0.25";


1 commentaires

Merci pour cela! J'aime cette approche parce que cela semble plus propre. +1