Php - Значение оператора столбца вопросительного знака

Что означает ?: в этой строке?

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

Спасибо.

Ответ 1

Это сокращение для оператора if.

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

То же, что и

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

см. здесь: https://3v4l.org/6XMc4

Но в этом примере функция 'getusername', вероятно, не работает правильно, потому что она попадает в else, только когда $_COOKIE['user'] - empty. Таким образом, параметр внутри getusername() также пуст.

Ответ 2

Это короткий ручной php, например:

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

Записанное это означает:

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

В вашем примере есть только оператор else.

Ответ 3

Он известен как тернарный оператор, аналогичный тому, который обычно называют встроенным if. Например, следующие два примера:

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

б)

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

Оба они будут иметь тот же эффект. Утверждение перед вопросительным знаком оценивается как истинное или ложное, а затем, если true, выполняется оператор перед двоеточием, а если false, то выполняется инструкция после двоеточия.

Для получения дополнительной информации вы можете проверить раздел "Терминальный оператор" на следующей странице документации PHP:

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

Ответ 4

Если значение $_COOKIE['user'] существует, тогда NULL else getusername($_COOKIE['user'] будет работать

это тернарный оператор в php