2008-10-02 10 views
24

Duplicate possible:
PHP equivalent of a Ruby assignment idiomvaleurs par défaut de réglage (affectation conditionnelle)

Dans Ruby, vous pouvez facilement définir une valeur par défaut pour une variable

x ||= "default" 

La déclaration ci-dessus mettra la valeur de x à "default" si x est nul ou faux

Y at-il un raccourci similaire en PHP ou dois-je utiliser la forme plus longue:

$x = (isset($x))? $x : "default"; 

Existe-t-il des moyens plus faciles à gérer cela en PHP?

+6

note ferme: cela me semble à la question écrite mieux, avec de meilleures réponses; plus, c'est plus vieux – kdgregory

Répondre

1

Je pense que votre forme plus est déjà le raccourci pour php ... et je ne voudrais pas l'utiliser, car il est bon de lire

Certains avis: Dans le cadre de symfony la plupart des « get « -Méthodes ont un second paramètre pour définir une valeur par défaut ...

8
isset($x) or $x = 'default'; 
+4

Cela fonctionnera tant que nous ne considérons pas les fausses valeurs de $ x comme étant 'définies'. –

+0

$ x === false et $ x = 'par défaut'; isset ($ x) ou $ x = 'default'; –

+0

J'aime vraiment les 'isset ($ x) ou $ x = 'default';' version; vous devriez mettre à jour votre réponse. :-) –

2

je l'enveloppe dans une fonction:

function default($value, $default) { 
    return $value ? $value : $default; 
} 
// then use it like: 
$x=default($x, 'default'); 

Certaines personnes peuvent ne pas aimer, mais il garde votre code plus propre si vous faites un appel de fonction fou.

+1

Le "problème" de l'encapsulation dans un appel de fonction est que tous les arguments sont évalués. En a = b || c, c n'est évalué que si b est falsey. Cela peut ou peut ne pas être ce que vous voulez. – KaptajnKold

+0

On espère que vous n'appelez pas les méthodes d'effets secondaires dans une tâche de toute façon. –

+0

@KaptajnKold Vous pouvez passer par ref, alors les arguments ne seront pas evald;) – NikiC

35

PHP 5.3, vous pouvez utiliser l'opérateur ternaire tout en omettant l'argument du milieu:

$x = $x ?: 'default'; 
+1

Pourquoi cette élégance n'est-elle pas plus connue? Je pense généralement que j'ai une connaissance quasi-pédant de PHP, mais cette gemme semble m'avoir échappé. Je vous remercie!! – orca

+0

PHP 5.3 Bien que. Je ne peux pas attendre alors c'est une norme requise pour Wordpress, puisque je développe des thèmes Wordpress. Mais c'est un mauvais opérateur ternaire juste là :) – Norris

+1

Un problème avec ceci est que PHP peut lancer un avis sur une variable indéfinie, et si vous le faites beaucoup il encombrera la sortie/logs selon ce que vous avez défini le niveau de rapport à. – jerseyboy

Questions connexes