PHP: Тернарный оператор
Посмотрите на определение функции, которая возвращает модуль переданного числа:
<?php
function abs($number)
{
if ($number >= 0) {
return $number;
}
return -$number;
}
abs(10); // 10
abs(-10); // 10
Можно ли записать её лаконичнее? Что-то вроде return ОТВЕТ В ЗАВИСИМОСТИ ОТ УСЛОВИЯ
? Для этого справа от return должно быть выражение, но if
— это инструкция, а не выражение.
В PHP существует конструкция, которая по своему действию аналогична конструкции if-else, но при этом является выражением. Она называется тернарный оператор.
Тернарный оператор — единственный в своем роде оператор, требующий три операнда:
<?php
function abs($number)
{
return $number >= 0 ? $number : -$number;
}
Общий паттерн выглядит так: <predicate> ? <expression on true> : <expression on false>
.
Давайте перепишем начальный вариант getTypeOfSentence()
аналогично:
Было:
<?php
function getTypeOfSentence($sentence)
{
$lastChar = substr($sentence, -1);
if ($lastChar === '?') {
return 'question';
}
return 'normal';
}
Стало:
<?php
function getTypeOfSentence($sentence)
{
$lastChar = substr($sentence, -1);
return ($lastChar === '?') ? 'question' : 'normal';
}
getTypeOfSentence('Hodor'); // normal
getTypeOfSentence('Hodor?'); // question
Если вы помните, в чём сила выражений, то вероятно уже догадались, что тернарный оператор можно вкладывать в тернарный оператор. Не делайте этого :) Такой код тяжело и читать и отлаживать, это очень плохая практика.
Задание
Реализуйте функцию convertText()
, которая принимает на вход строку и, если первая буква не заглавная, возвращает перевернутый вариант исходной строки. Если первая буква заглавная, то строка возвращается без изменений.
Примеры вызова:
<?php
convertText('Hello'); // 'Hello'
convertText('hello'); // 'olleh'
Перевернуть строчку можно, используя функцию strrev().
Есть разные подходы к решению этой задачи. Возможно, вам пригодятся функции ucfirst(), strtoupper и возможность получения символа из строки (например, $str[0]
).
Попробуйте написать два варианта функции: с обычным if-else, и с тернарным оператором.
Определения
Тернарный оператор - cпособ превратить простую условную инструкцию в выражение, например,
$number >= 0 ? $number : -$number
.
Пожалуйста, авторизуйтесь, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт.