PHP: Условная конструкция (if)
Логические выражения позволяют проверять разные условия. Но сами по себе они лишь возвращают true или false. Чтобы программа могла выполнять разные действия в зависимости от результата, в PHP есть специальная конструкция if:
<?php
if (5 > 3) {
print_r('Yes, it is true');
}Здесь строка 'Yes, it is true' напечатается, потому что условие 5 > 3 истинно.
┌───────────┐
│ условие? │
└─────┬─────┘
true │
↓
┌───────────┐
│ тело if │
└───────────┘Блоки кода
После слова if в круглых скобках пишется условие, а затем в фигурных скобках описывается блок кода. Все инструкции внутри фигурных скобок входят в один блок:
<?php
if (10 === 10) {
print_r("First\n");
print_r("Second\n");
}
print_r('Goodbye!');Здесь напечатаются First и Second, потому что условие выполнилось. А Goodbye! напечатается в любом случае, так как эта инструкция уже за пределами блока. Принцип такой же, как и в определении функций.
Использование if внутри функции
Рассмотрим функцию, которая определяет тип переданного предложения. Если оно оканчивается на знак вопроса, функция вернет 'question', иначе вернет 'normal':
<?php
function getTypeOfSentence(string $sentence): string
{
// Простой способ извлечь последний символ
$lastChar = $sentence[-1];
if ($lastChar === '?') {
return 'question';
}
return 'normal';
}
print_r(getTypeOfSentence('Hodor') . "\n"); // => normal
print_r(getTypeOfSentence('Hodor?') . "\n"); // => questionЗдесь используется сразу два return. Если условие внутри if выполняется, срабатывает return 'question'; и функция завершается. Если условие не выполняется, управление переходит на следующую строку с return 'normal';.
Таким образом, у функции есть несколько возможных точек выхода. Это частая практика. В зависимости от условий функция может завершаться по-разному.
Несмотря на то, что функция getTypeOfSentence() использует if, она возвращает строки, а значит, предикатом не является. В качестве предиката рассмотрим функцию, которая проверяет, достаточно ли денег для покупки:
<?php
function hasEnoughMoney(int $balance, int $price): bool
{
if ($balance >= $price) {
return true;
}
return false;
}
var_dump(hasEnoughMoney(100, 50)); // => bool(true)
var_dump(hasEnoughMoney(30, 50)); // => bool(false)if и логические выражения
Функцию hasEnoughMoney() мы написали через if. Но в таком виде она могла бы обойтись и без него, потому что результат сравнения сам по себе уже является логическим выражением:
<?php
function hasEnoughMoney(int $balance, int $price): bool
{
return $balance >= $price;
}В простых случаях лучше сразу возвращать такое выражение. if нужен там, где внутри блока выполняются дополнительные действия помимо возврата результата. Чем более сложные программы мы будем писать, тем чаще такие ситуации начнут встречаться.
Задание
В викторине загадано число 42. Участник называет число, и программа сразу говорит — угадал он или нет. Реализуйте функцию guessNumber(), которая принимает число и проверяет, равно ли оно 42. Если равно — возвращает 'You win!', иначе — 'Try again!'.
<?php
guessNumber(42); // 'You win!'
guessNumber(61); // 'Try again!'PHP: Условная конструкция (if)
Логические выражения позволяют проверять разные условия. Но сами по себе они лишь возвращают true или false. Чтобы программа могла выполнять разные действия в зависимости от результата, в PHP есть специальная конструкция if:
<?php
if (5 > 3) {
print_r('Yes, it is true');
}Здесь строка 'Yes, it is true' напечатается, потому что условие 5 > 3 истинно.
┌───────────┐
│ условие? │
└─────┬─────┘
true │
↓
┌───────────┐
│ тело if │
└───────────┘Блоки кода
После слова if в круглых скобках пишется условие, а затем в фигурных скобках описывается блок кода. Все инструкции внутри фигурных скобок входят в один блок:
<?php
if (10 === 10) {
print_r("First\n");
print_r("Second\n");
}
print_r('Goodbye!');Здесь напечатаются First и Second, потому что условие выполнилось. А Goodbye! напечатается в любом случае, так как эта инструкция уже за пределами блока. Принцип такой же, как и в определении функций.
Использование if внутри функции
Рассмотрим функцию, которая определяет тип переданного предложения. Если оно оканчивается на знак вопроса, функция вернет 'question', иначе вернет 'normal':
<?php
function getTypeOfSentence(string $sentence): string
{
// Простой способ извлечь последний символ
$lastChar = $sentence[-1];
if ($lastChar === '?') {
return 'question';
}
return 'normal';
}
print_r(getTypeOfSentence('Hodor') . "\n"); // => normal
print_r(getTypeOfSentence('Hodor?') . "\n"); // => questionЗдесь используется сразу два return. Если условие внутри if выполняется, срабатывает return 'question'; и функция завершается. Если условие не выполняется, управление переходит на следующую строку с return 'normal';.
Таким образом, у функции есть несколько возможных точек выхода. Это частая практика. В зависимости от условий функция может завершаться по-разному.
Несмотря на то, что функция getTypeOfSentence() использует if, она возвращает строки, а значит, предикатом не является. В качестве предиката рассмотрим функцию, которая проверяет, достаточно ли денег для покупки:
<?php
function hasEnoughMoney(int $balance, int $price): bool
{
if ($balance >= $price) {
return true;
}
return false;
}
var_dump(hasEnoughMoney(100, 50)); // => bool(true)
var_dump(hasEnoughMoney(30, 50)); // => bool(false)if и логические выражения
Функцию hasEnoughMoney() мы написали через if. Но в таком виде она могла бы обойтись и без него, потому что результат сравнения сам по себе уже является логическим выражением:
<?php
function hasEnoughMoney(int $balance, int $price): bool
{
return $balance >= $price;
}В простых случаях лучше сразу возвращать такое выражение. if нужен там, где внутри блока выполняются дополнительные действия помимо возврата результата. Чем более сложные программы мы будем писать, тем чаще такие ситуации начнут встречаться.
Задание
В викторине загадано число 42. Участник называет число, и программа сразу говорит — угадал он или нет. Реализуйте функцию guessNumber(), которая принимает число и проверяет, равно ли оно 42. Если равно — возвращает 'You win!', иначе — 'Try again!'.
<?php
guessNumber(42); // 'You win!'
guessNumber(61); // 'Try again!'Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Conditionals\IfStatement;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$this->assertEquals('Try again!', guessNumber(100500));
$this->assertEquals('You win!', guessNumber(42));
}
}Решение учителя откроется через:
20:00
