Meilleure façon de donner à une variable une valeur par défaut (simuler Perl ||, ||= )
J'adore faire ce genre de chose en Perl: $foo = $bar || $baz
à attribuer $baz
à $foo
si $bar
est vide ou non. Vous avez également $foo ||= $bletch
qui ne assigner $bletch
à $foo
si $foo
n'est pas défini ou vide.
L'opérateur ternaire dans cette situation est pénible et fatigant. Sûrement il y a un simple, élégant méthode en PHP?
Ou, la seule réponse est une fonction personnalisée qui utilise la fonction isset()?
- Connexes sur la Revue de Code: codereview.stackexchange.com/q/12722/31433
- BTW le Perl opérateurs avec les fonctionnalités souhaitées sont
//
et//=
et ils existent aussi de Perl v5.10.0. L'original||
et||=
test logique de la valeur, pas pour definedness. - pourquoi un 4-année-vieille question avec 29 upvotes être identifié comme un double d'un enfant de 1 an question avec 6 upvotes (qui lui-même a été marqué comme un doublon d'une autre question?) Je pense qu'il y a une grande valeur dans le maintien de cette question, tant le titre est plus générique (ne faisant pas référence à la réponse c'est à dire: la fonction isset()).
- Ils sont précis et clairs les doublons. Il avoue que je ne pense pas beaucoup à propos de ce qui devrait être l'original, j'ai été dans le milieu de quelque chose d'autre, de faire un lien entre les deux était le but. La rétraction de mon VTC.
- Une copie exacte, marqué OMI (à tort) comme un doublon d'une autre question: PHP raccourci pour la fonction isset()?
- vos noms de variable me confondre. Pourquoi vous n'utilisez pas de "x" "y" "z" ...??
- En fait, "foo", "bar", "baz" et (sans doute) "bletch" sont assez courantes dans le monde de la programmation - sujet aussi commun que "x", "y" et "z" dans le contexte de donner l'exemple de variable, de fonction, les noms de méthode.
Vous devez vous connecter pour publier un commentaire.
En PHP 7 nous avons enfin un moyen de le faire avec élégance. Il est appelé le Null coalescence de l'opérateur. Vous pouvez l'utiliser comme ceci:
C'est l'équivalent de
<=>
et assez précis pour démarrer!PHP 5.3 est une abréviation
?:
opérateur:Qui attribue
$bar
si ce n'est pas une valeur vide (je ne sais pas en quoi ce serait différent en PHP à partir de Perl), sinon$baz
, et est le même que celui en Perl et les anciennes versions de PHP:Mais PHP ne dispose pas d'un opérateur d'assignation composé pour cela (qui est, sans aucun équivalent de Perl
||=
).Aussi, PHP va faire du bruit si
$bar
n'est pas défini, sauf si vous tournez avis off. Il y a aussi une différence sémantique entreisset()
etempty()
. Le premier renvoie false si la variable n'existe pas, ou est mis àNULL
. Celle-ci retourne true si elle n'existe pas, ou est mis à0
,''
,false
ouNULL
.The first returns
au lieu deThe second
dans votre avant-dernière phrase.$var = isset($var) ? $var : 'default value';
Il est dit que dans la réponse... il suffit de pointer de nouveau pour quelqu'un qui parcourt-il. 😀Merci pour toutes les réponses grands!
Pour quelqu'un d'autre de venir ici pour une alternative possible, voici quelques fonctions qui aident à éliminer l'ennui de ce genre de chose.
Exemples:
Je suis sûr que ceux-ci peuvent être améliorées.
Un idiome commun pour rester compatible avec les anciennes versions de PHP est:
Cela fonctionne pour les valeurs qui peuvent être évaluées dans le contexte booléen. L'avantage ici c'est qu'il vous donne également dit debug e_notice si la variable sera pas défini.
$bool ? $bool : "default"
si$bool
n'est pas défini?isset($var) ? $var : DEFAULT
. Mais les sons comme il veut fuir de toute façon.En PHP antérieures à 7.*, on peut l'utiliser ?: pour une variable indéfinie avoir des erreurs localement supprimée avec un
@
:c'est un autre bon format pour le
isset
casisset($foo) || $foo= $bar;
un autre moyen simple et vous donnera plus de contrôle que vous pouvez ajouter plus de conditions et de les assigner à une autre variable dans le même temps
$foo = (isset($oData['foo']))?$bar['foo']:'default value';