PHP: Оператор Элвис
Представим такую задачу: на сайте у пользователей могут быть имена и псевдонимы. Если имя есть, то нужно обращаться к человеку по имени. Если имени нет — обращаемся по псевдониму. Попробуем собрать строку с приветствием человека по этим требованиям:
<?php
function generateGreeting(string $name, string $nickname): string
{
if ($name) {
return "Hello, {$name}!";
} else {
return "Hello, {$nickname}!";
}
}
generateGreeting('Bob', 'CoolBob86'); // 'Hello, Bob!'
generateGreeting('', 'CoolBob86'); // 'Hello, CoolBob86!'Мы воспользовались тем фактом, что PHP преобразовывает типы. В коде if ($name) PHP превратит $name в тип bool. Если была пустая строка, то получится false. В ином случае получится true.
С тернарным оператором можно получить более короткую запись:
<?php
function generateGreeting(string $name, string $nickname): string
{
return $name ? "Hello, {$name}!" : "Hello, {$nickname}!";
}Это частый случай — мы оперируем значениями bool и получаем:
- Первое значение, если
true - Второе значение в ином случае
В PHP для таких случаев есть специальный оператор:
<?php
function generateGreeting(string $name, string $nickname): string
{
$user = $name ?: $nickname;
return "Hello, {$user}!";
}Оператор ?: — бинарный оператор, который возвращает первый операнд если он истинен, и второй в ином случае. Еще его называют Elvis, потому что это слово
похоже на else if. А еще из-за визуального сходства с Элвисом Пресли:

Задание
Напишите функцию generateAmount(), которая принимает два числа: количество товаров и стоимость аудита. Если товаров 0, то функция возвращает стоимость аудита, умноженную на 3. Если товаров не 0, то функция возвращает количество товаров.
Примеры вызова:
<?php
generateAmount(0, 2); // 6
generateAmount(0, 5); // 15
generateAmount(1, 2); // 1
generateAmount(12, 49); // 12Полезное
PHP: Оператор Элвис
Представим такую задачу: на сайте у пользователей могут быть имена и псевдонимы. Если имя есть, то нужно обращаться к человеку по имени. Если имени нет — обращаемся по псевдониму. Попробуем собрать строку с приветствием человека по этим требованиям:
<?php
function generateGreeting(string $name, string $nickname): string
{
if ($name) {
return "Hello, {$name}!";
} else {
return "Hello, {$nickname}!";
}
}
generateGreeting('Bob', 'CoolBob86'); // 'Hello, Bob!'
generateGreeting('', 'CoolBob86'); // 'Hello, CoolBob86!'Мы воспользовались тем фактом, что PHP преобразовывает типы. В коде if ($name) PHP превратит $name в тип bool. Если была пустая строка, то получится false. В ином случае получится true.
С тернарным оператором можно получить более короткую запись:
<?php
function generateGreeting(string $name, string $nickname): string
{
return $name ? "Hello, {$name}!" : "Hello, {$nickname}!";
}Это частый случай — мы оперируем значениями bool и получаем:
- Первое значение, если
true - Второе значение в ином случае
В PHP для таких случаев есть специальный оператор:
<?php
function generateGreeting(string $name, string $nickname): string
{
$user = $name ?: $nickname;
return "Hello, {$user}!";
}Оператор ?: — бинарный оператор, который возвращает первый операнд если он истинен, и второй в ином случае. Еще его называют Elvis, потому что это слово
похоже на else if. А еще из-за визуального сходства с Элвисом Пресли:

Задание
Напишите функцию generateAmount(), которая принимает два числа: количество товаров и стоимость аудита. Если товаров 0, то функция возвращает стоимость аудита, умноженную на 3. Если товаров не 0, то функция возвращает количество товаров.
Примеры вызова:
<?php
generateAmount(0, 2); // 6
generateAmount(0, 5); // 15
generateAmount(1, 2); // 1
generateAmount(12, 49); // 12Полезное
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Conditionals\Elvis;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$this->assertEquals(6, generateAmount(0, 2));
$this->assertEquals(15, generateAmount(0, 5));
$this->assertEquals(1, generateAmount(1, 2));
$this->assertEquals(15, generateAmount(15, 16));
}
}Решение учителя откроется через:
20:00
