Que signifie ?:
dans cette ligne?
$_COOKIE['user'] ?: getusername($_COOKIE['user']);
Je vous remercie.
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.
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.
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
si $_COOKIE['user']
la valeur est existe alors NULL
sinon getusername($_COOKIE['user']
fonctionnera
c'est un opérateur ternaire en php