---

name: Комбинирование операций и функций
theory: |

  Логические операции — это выражения. Значит, **логические операции можно комбинировать с другими выражениями**.

  Например, мы хотим проверить чётность числа, то есть кратность двум. В программировании используют такой подход:

  * проверяют остаток от деления на 2:
    * если остаток 0, то число было чётным
    * если остаток не 0, то число было нечётным

  Остаток от деления — простая, но очень важная концепция в арифметике, алгебре, и даже в теории чисел и криптографии. Идея проста: нужно разделить число на несколько равных групп, и если в конце что-то останется — это и есть остаток от деления.

  Делим конфеты поровну между людьми:

  - 7 конфет, 2 человека: 2 x 3 + **остаток 1**.
    Значит, 7 не кратно 2.
  - 21 конфета, 3 человека: 3 x 7 + **остаток 0**.
    Значит, 21 кратно 3.
  - 19 конфет, 5 человек: 5 x 3 + **остаток 4**.
    Значит, 19 не кратно 5.

  Оператор `%` вычисляет остаток от деления (не путайте с делением):

  - `7 % 2` → `1`
  - `21 % 3` → `0`
  - `19 % 5` → `4`

  ```php
  <?php

  7 % 2;  // 1
  21 % 3; // 0
  19 % 5; // 4

  // Проверка четности

  10 % 2 // 10 четное, так как остаток 0
  9 % 2  // 9 нечетное, так как остаток 1
  ```

  Напишем функцию проверки чётности:

  ```php
  <?php

  function isEven($number)
  {
      return $number % 2 === 0;
  }

  isEven(10); // true
  isEven(3);  // false
  ```

  В одном выражении мы скомбинировали логический оператор `===` (проверка равенства) и арифметический оператор `%`.

  Приоритет арифметических операций выше логических. Значит, сначала вычисляется арифметическое выражение `$number % 2`, затем результат участвует в логическом сравнении.

  Словами это можно расшифровать так: *«вычислить остаток от деления числа `$number` на 2 и сравнить, равен ли остаток нулю; затем вернуть результат проверки равенства»*.

  ---

  Другой пример: напишем функцию, которая принимает строку и проверяет, заглавная ли первая буква.

  Алгоритм:

  1. Получим и запишем в переменную первый символ из строки-аргумента.
  1. Сравним, равен ли символ своей большой (заглавной) версии.
  1. Вернём результат.

  ```php
  <?php

  function isFirstLetterInUpperCase($string)
  {
      $firstLetter = $string[0];
      $isSame = strtoupper($firstLetter) === $firstLetter;
      return $isSame;
  }

  isFirstLetterInUpperCase('marmont'); // false
  isFirstLetterInUpperCase('Robb'); // true
  ```

  Мы использовали [функцию `strtoupper()` из стандартной библиотеки PHP](https://php.net/manual/ru/function.strtoupper.php). Она принимает строку и возвращает строку, в которой все буквы стали заглавными. Мы передаём ей всего один символ — первый символ строки.

  Попробуйте проговорить происходящее по-русски, аналогично тому, как мы расшифровывали процесс в примере с `isEven()` в начале урока.

  ---

  *Напомним об извлечении символов из строки с помощью квадратных скобок:*

  ```php
  <?php

  $firstName = 'Alexander';

  $firstName[0]; // A
  ```

instructions: |

  Реализуйте функцию `isInternationalPhone()`, которая проверяет формат указанного телефона. Если телефон начинается с *+*, значит это международный формат.

  ```php
  <?php

  isInternationalPhone('89602223423'); // false
  isInternationalPhone('+79602223423'); // true
  ```
