2010-12-07 7 views
0

Possible en double:
What is the PHP ? : operator called and what does it do?Syntaxe PHP avec? et:

J'ai trouvé la réponse à quelque chose que je cherchais, mais je ne comprends pas tout à fait la syntaxe parce qu'ils ont utilisé, je pense, à court Mots clés. Voici le code:

$temp = is_array($value) ? $value : trim($value); 

Quelqu'un pourrait-il expliquer comment cela fonctionne? Je pense que cela signifie si la valeur est true, renvoyer la valeur et si false renvoie la valeur rognée, mais je ne suis pas sûr. Peut-il y avoir plus de deux options, ou est-ce strictement vrai et faux?

+0

Aussi: [Référence - Que signifie ce symbole en PHP?: & = & !! @ :: => -> >> ++. =] (http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – mario

Répondre

3

Vous avez raison. C'est un opérateur conditionnel, ?: est un opérateur ternaire.

<?php 

// Example usage for: Ternary Operator 
$temp = is_array($value) ? $value : trim($value); 

// The above is identical to this if/else statement 
if (is_array($value)) { 
    $temp = $value; 
} else { 
    $temp = trim($value); 
} 

?> 

Prenez un chemin regard demi-bas de cette page pour plus d'informations:

http://php.net/manual/en/language.operators.comparison.php

+0

Il est connu comme * le * opérateur ternaire tant que '.' est connu comme * l'opérateur binaire *: P – alex

0

Il est fondamentalement la Identique à

if(is_array($value)) { 
    $temp = $value; 
} else { 
    $temp = trim($value); 
} 
1

$condition ? true : false, l'instruction ? est la même que

if($condition) 
    true 
else 
    false 

donc dans votre exemple, le code est le même que

if(is_array($value)) 
    $temp = $value 
else 
    $temp = trim($value); 
0

Vous avez raison. Si is_array($value) renvoie true, l'expression définit $temp = $value sinon $temp = trim($value).

0

Strictement deux choix. Vous l'avez interprété correctement.

if (is_array($value)) $temp = $value; 
else $temp = trim($value); 

Si vous voulez pirater cette syntaxe pour avoir 3 valeurs que vous pourriez faire $temp = (condition1) ? true : (condition2) ? true2 : false;

+0

En effet, bien qu'il soit probablement utile d'ajouter des parenthèses pour un regroupement plus clair:' $ temp = $ condition1? 'val1': ($ condition2 '' val2 ':' val3 '); 'Et certaines personnes soutiennent que chaîner l'opérateur ternaire de cette façon est intrinsèquement difficile à lire. YMMV. ;-) –

0

C'est l'opérateur ternaire. Son va convertir exp avant? à un bool. Si vous voulez plus d'options, il suffit de combiner multi?:.

(con?trueorfalseiftrue:otherwise)? (con2?_:_):(con3?_:_)