Сложение, конкатенация и остальные рассмотренные операции — это базовые возможности языков программирования. Но со строками можно поизводить более сложные операции. Их можно переворачивать, менять регистр букв, удалять лишние символы.
На более высоком уровне есть прикладная логика конкретного приложения. Программы списывают деньги, считают налоги, формируют отчеты. Количество подобных операций бесконечно и индивидуально для каждой программы. И все они должны быть выражены в коде. В этом помогают функции, с которыми мы познакомимся в этом уроке.
Для выражения любой произвольной операции в программировании существуют функции. Они бывают встроенными и добавленными программистом. С одной встроенной функцией мы уже знакомы — это print_r()
.
Функции — одна из ключевых конструкций в программировании, без них невозможно сделать практически ничего. Сначала мы научимся пользоваться уже созданными функциями, а потом научимся создавать свои.
Начнем с простых функций для работы над строками. Ниже пример вызова функции strrev()
, которая переворачивает строку:
<?php
// Вызов функции strrev с аргументом 'Hello!'
$result = strrev('Hello!');
print_r($result); // => '!olleH'
Мы создали переменную $result
и указали интерпретатору записать в нее результат, который вернет вызов функции strrev()
. В этом смысле функции идентичны операциям — они всегда возвращают результат своей работы.
Запись strrev('Hello!')
означает, что вызывается функция с именем strrev
, в которую был передан аргумент или параметр 'Hello!'
.
Аргументы нужны функциям для работы так же, как операторам нужны операнды. Функция strrev()
переворачивает ту строку, которая передается ей в аргументах.
Вызов функции всегда обозначается скобками ()
. Они идут сразу за именем функции. В скобках может быть любое количество аргументов, а иногда — ни одного. Количество зависит от используемой функции. Например, функция pow()
принимает на вход два аргумента и возводит число, переданное первым параметром, в степень, переданную вторым параметром:
<?php
$result = pow(2, 3); // 2 * 2 * 2
print_r($result); // => 8
// В современном PHP появился специальный оператор для возведения в степень
$result = 2 ** 3; // 8
Теперь рассмотрим пример функции, которая не принимает аргументов. Функция rand()
генерирует и возвращает случайное число:
<?php
$result = rand();
Операторы и функции — это одно и то же. Разница в том, как они записываются. Если представить сложение как функцию, то она будет выглядеть так:
<?php
3 + 5; // 8
sum(3, 5); // 8
// Или даже так
+(3, 5);
// В PHP такой синтаксис невозможен, но есть языки (например, lisp),
// где оно выглядит очень похоже
Вопрос на самопроверку. Как узнать, что возвращает вызов print_r()
? Проверьте.
В коде программы определены две переменные, содержащие имена компаний. Посчитайте их общую длину в символах и выведите ее на экран.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1<?php // phpcs:ignore PSR1.Files.SideEffects
2
3namespace HexletBasics\CallingFunctions\Call;
4
5use PHPUnit\Framework\TestCase;
6
7\HexletBasics\Functions\runScript();
8
9class Test extends TestCase
10{
11 public function test()
12 {
13 $expected = "12";
14 $this->expectOutputString($expected);
15 require 'index.php';
16 }
17}
18
Решение учителя откроется через: