/
Программирование
/
Курс PHP
/

Функции и их вызов

PHP: Функции и их вызов

Программирование нужно для того, чтобы выполнять самые разные операции. Иногда это простые действия, например сложение чисел или объединение строк. Но чаще это сложные процессы вроде перевода денег со счета на счет, оформления заказа в интернет-магазине, расчета налогов или подготовки отчета.

Такие операции невозможно выразить одной командой. За действием вроде «перевести деньги» могут скрываться десятки, сотни и даже тысячи строк кода. Это проверка баланса, списание суммы, учет комиссии, обновление базы данных, отправка уведомления пользователю.

Чтобы управлять этим кодом и не теряться в деталях, используют функции. Функция объединяет блок кода в единое целое, прячет реализацию и позволяет сосредоточиться на смысле. Для программиста достаточно вызвать функцию и доверить ей всю внутреннюю работу.

Функция

Представим функцию, которая переводит деньги с одного счета на другой. В реальности внутри нее могут быть сотни строк кода, но мы этого не видим. Снаружи все выглядит как одна простая команда:

<?php

transferMoney('Alice', 'Bob', 100);

Эта строка вызывает функцию transferMoney(). Ей передаются отправитель Alice, получатель Bob и сумма 100.

Вот еще несколько примеров вызова функций, которые мы могли бы реализовать. У каждой функции свое имя и свой набор данных для работы.

<?php

// Да-да, print_r тоже функция
print_r('Хекслет!');

// Отправка письма пользователю
sendEmail('bob@example.com', 'Добро пожаловать!');

// Вычисление налога с указанной суммы
calculateTax(5000, 'Florida');

// Проверка, есть ли пользователь в системе
isRegistered('Alice');

// Получение случайного числа от 1 до 10
randomNumber(1, 10);

// Создание резервной копии базы данных
backupDatabase();

// Вычисление длины строки
strlen('Hexlet'); // Результат: 6

В вызове функции сначала пишется ее имя, затем круглые скобки. Скобки показывают, что это именно вызов. Так мы понимаем, что перед нами функция, а не переменная.

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

Откуда берутся функции?

Одни функции встроены в язык (built-in), другие создают сами программисты.

Встроенные функции представляют собой функции, которые идут вместе с языком PHP. Их можно использовать сразу, без дополнительных действий. В качестве примера можно привести функцию print_r(). Как говорят, она доступна глобально.

Функции, определяемые программистами, создаются тогда, когда нужно оформить свою логику в отдельный блок. Такую функцию можно назвать любым именем и использовать в коде так же, как встроенные. Мы научимся этому позже.

Кроме того, существуют функции, которые находятся в отдельных библиотеках. Чтобы ими пользоваться, библиотеку нужно установить и подключить к программе. Подробно этот механизм мы пока не разбираем. Пока достаточно знать, что он позволяет подключить внешний набор функций и сделать их доступными в программе.

Функция с одним параметром

Одной из самых часто используемых встроенных функций является strlen(). Она возвращает количество символов в строке.

<?php

$message = 'Hello!';
$count = strlen($message);
print_r($count); // => 6

Здесь в строке 'Hello!' шесть символов, поэтому вызов strlen($message) вернет число 6.

Аргументы          Функция         Результат
┌──────────┐     ┌──────────┐     ┌──────────┐
│ 'Hello!' │ ──→ │ strlen() │ ──→ │    6     │
└──────────┘     └──────────┘     └──────────┘

Возврат значения

Возврат значения является одним из ключевых принципов работы функций. Благодаря ему мы можем соединять результаты разных действий и строить более сложную логику. Если функция возвращает значение, то мы можем сохранить его в переменную, передать в другую функцию или использовать в вычислениях. Именно так работает strlen(). Она считает количество символов и отдает результат наружу.

<?php

$message1 = 'Hello!';
$length1 = strlen($message1); // сохраняем результат

$message2 = 'World!';
$length2 = strlen($message2);

$combinedLength = $length1 + $length2; // используем результат в выражении
print_r($combinedLength); // => 12

Если бы strlen() сразу печатала результат на экран (как делает print_r()), то мы бы увидели число, но не смогли бы его использовать:

<?php

// воображаемая функция, которая только печатает результат
fakeStrlen('Hello!'); // напечатает 6

// но дальше это число уже недоступно
// мы не можем его прибавить, сохранить или сравнить
$result = fakeStrlen('Hello!'); // здесь в $result ничего нет

Вот почему возврат значения представляет собой настолько важную концепцию. Он позволяет связывать функции между собой. Одни возвращают данные, другие используют их в своей работе. Именно так из маленьких шагов строятся большие и сложные программы.

Функция с несколькими параметрами

Некоторые функции принимают сразу несколько данных для работы. В качестве примера подойдет встроенная функция pow(), которая возводит число в нужную степень. Первый параметр принимает основание степени, второй задает показатель.

<?php

// 2 возводим в 3-ю степень: 2 * 2 * 2
$result = pow(2, 3);
print_r($result); // => 8

// 5 во 2-й степени: 5 * 5
print_r(pow(5, 2)); // => 25

По структуре вызов с несколькими параметрами не отличается от вызова с одним. Те же имя функции, скобки и аргументы через запятую внутри.

Параметры и аргументы

В разговорах о функциях то и дело встречаются слова параметры и аргументы. Они связаны, но не одно и то же.

О параметрах говорят при создании функции. Параметром называют переменную внутри функции, в которую попадает переданное значение. Об аргументах говорят при вызове. Аргументом называют то, что мы передаем в функцию. Это может быть число, переменная или любое выражение.

<?php

// числа в качестве аргументов
print_r(pow(2, 3)); // => 8

$x = 2;
// аргумент может быть выражением, оно вычислится до передачи в функцию
print_r(pow($x + 1, 3)); // => 27

Запоминать это не обязательно, но пригодится при чтении англоязычной литературы.

Задание

Сайт проверяет, вместится ли реклама двух компаний-партнеров в одну строку. В коде определены их названия — посчитайте общее количество символов в обоих названиях с помощью функции strlen() и выведите на экран.

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются