PHP: Тернарный оператор

Тернарный оператор ?: в PHP позволяет выполнять простое условное сравнение в одной строке.

# Синтаксис
$variable = (условие) ? значение_если_истина : значение_если_ложь;

# Пример:
$age = 25;
$message = ( $age >= 18 ) ? 'Доступ разрешен' : 'Доступ запрещен';

Краткий тернарный оператор

Краткий тернарный оператор ?: работает почти так же, как и обычный тернарный оператор, но он пропускает часть "если истина", возвращая тестовое выражение в случае истины.

# Синтаксис
$variable = (условие) ?: значение_если_ложь;

# Пример:
$name = 'Александр';
$displayName = $name ?: 'Гость';

# Аналогичен этому коду
if( $name )
{
	$displayName = $name;
} 
else 
{
	$displayName = 'Гость';
}

Оператор объединения с null или оператор Null coalescing

Оператор ?? проверяет, является ли значение NULL или не установлено, и возвращает первое не-NULL значение из списка.

# Синтаксис
$variable = значение1 ?? значение2 ?? значение3;

# Пример:
$username = $_GET['username'] ?? 'Гость';
# В данном примере, если $_GET['username'] не установлен или NULL, переменная $username будет установлена в 'Гость'.

# Аналогичен этому коду
$username = isset( $_GET['username'] ) ? $_GET['username'] : 'Гость';

# Или этому
if( isset( $_GET['username'] ) )
{
    $username = $_GET['username'];
} 
else 
{
    $username = 'Гость';
}
3 г. Просмотров: 14.9k
Материал помог? Оценка помогает находить устаревшие и спорные решения.

Комментарии

3

Нашли ошибку или хотите дополнить материал?

Комментарий удалён

Текст комментария удалён автором.

ust-balyk
Привет всем! Я совсем зелёный, но вроде такие запросы как правило идут из формы.
В таком случае, последний пример с $username не работает..
Попробуйте что то вроде этого:
if( empty( $first_name= $_GET[‘first_name']?: '' ));
if( empty( $last_name= $_GET['last_name']?: '' ));
if( $first_name== '' && $last_name== '' )$first_name= 'anonymous';
print_r( mb_convert_case( "USER: $first_name $last_name", MB_CASE_TITLE, "UTF-8" ));
Профессор кислых щей
Что нужно получить на выходе?
В твоём коде есть ошибки. Вот вариант без ошибок:
$firstName = $_GET['first_name'] ?? '';
$lastName = $_GET['last_name'] ?? '';
$firstName = ($firstName === '' && $lastName === '') ? 'anonymous' : $firstName;
echo mb_convert_case("USER: $firstName $lastName", MB_CASE_TITLE, "UTF-8");
Telegram