web-dev-qa-db-fra.com

php - Signification de point d'interrogation opérateur côlon

Que signifie ?: dans cette ligne?

$_COOKIE['user'] ?: getusername($_COOKIE['user']);

Je vous remercie.

13
Lewis

C'est un raccourci pour une déclaration if.

$username = $_COOKIE['user'] ?: getusername($_COOKIE['user']);

Est le même que

if( $_COOKIE['user'] ) 
{
    $username = $_COOKIE['user'];
} 
else
{
    $username = getusername($_COOKIE['user']); 
}

voir la suite de tests ici: https://3v4l.org/6XMc4

Mais dans cet exemple, la fonction 'getusername' ne fonctionne probablement pas correctement, car elle ne touche la variable else que lorsque $_COOKIE['user'] est empty. Donc, le paramètre à l'intérieur de getusername() est aussi un peu vide.

18
trizz

C'est php à main courte, par exemple:

(true == true ? echo "this is true" : "this is false")

Ecrit ceci signifie:

if (true == true) {
    echo "This is true";
}
else {
    echo "This is false";
}

Dans votre exemple, il n'y a qu'une déclaration else.

2
Arko Elsenaar

C'est ce qu'on appelle l'opérateur ternaire, semblable à ce qu'on appelle couramment un inline if. Par exemple, les deux exemples suivants:

a) $genderString = $genderAbbreviation == "M" ? "Male" : "Female";

b)

if ($genderAbbreviation == "M")
{
    $genderString = "Male";
}
else
{
    $genderString = "Female";
}

Les deux auront le même effet. L'instruction avant le point d'interrogation est évaluée comme étant vraie ou fausse, puis si elle est vraie, l'instruction avant les deux points est exécutée et si elle est fausse, l'instruction après les deux points est exécutée.

Pour plus d'informations, vous pouvez consulter la section intitulée "Opérateur ternaire" à la page suivante de la documentation PHP:

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

2
Nick Coad

si $_COOKIE['user'] la valeur est existe alors NULL sinon getusername($_COOKIE['user'] fonctionnera

c'est un opérateur ternaire en php

0
Rakesh Sharma