Искать
Вы превысили запрос на
0 знаков

15. Пользовательские функции в PHP

Не пройден
6 заданий

Кратко

Основы функций в PHP

- Функции объявляются и вызываются с использованием синтаксиса, описанного в предыдущем уроке.

- Параметры и аргументы являются ключевыми элементами функций.

Использование ключевого слова return

- Ключевое слово return позволяет возвращать значения из функций.

- Возвращаемые значения могут быть использованы для вывода или передачи в другие функции.

- Подсказки о типе (type hinting) помогают предотвратить ошибки при передаче аргументов неправильного типа.

Необязательные параметры и именованные аргументы

- Необязательные параметры могут быть добавлены для гибкости функций.

- Именованные аргументы позволяют изменять значения параметров без необходимости перечисления всех аргументов.

Строгая проверка типов

- Строгая проверка типов предотвращает автоматическое преобразование данных и вызывает ошибку при передаче неверных данных.

- Строгая проверка типов может быть включена с помощью специальной команды.

Примеры функций

- В статье приведены примеры функций, которые сортируют строки по длине, проверяют палиндромы, проверяют уникальность массивов, фильтруют массивы по типу и генерируют случайные числа.

Заключительные замечания

- Автор подчеркивает важность саморазвития в изучении PHP и предлагает продолжить изучение дополнительных материалов.

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

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

Впервые глядя на PHP-код, можно подумать, что операторы должны выполняться так, как они записаны, один за другим. Однако на практике интерпретатор PHP может выполнять операторы в совершенно другом порядке.

Как правило, вы будете видеть функции, объявленные в верхней части страницы. Если в верхней части страницы также объявляются переменные, то эти переменные обычно объявляются перед определениями функций.

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

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

Пример (php)
<?php
	function getNumber()
	{
		echo 10;
	}

	function getString()
	{
		echo 'Codebra';
	}
?> 

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

Важно

В этом курсе мы не будем писать о том, как работает очистка памяти в PHP. Вместо этого я предлагаю вам самим прочитать вот эту [ссылка доступна авторизованным пользователям].

Сделаем вызов функций:

Пример (php)
<?php
	function getNumber()
	{
		echo 10;
	}

	function getString()
	{
		echo 'Codebra';
	}

	getNumber();
	getString();
?> 

В этом коде мы вызвали две функции. После чего произойдёт автоматическая очистка памяти.

Ключевое слово return

До этого мы создавали функции, которые после вызова сами выводили нужные нам значения на экран. Так можно делать, но это примитивное применение. Не стоит так делать (хотя есть, конечно же, исключения в правилах, но в целом нужно использовать ключевое слово return).

Так что же такое return? Переведём на русский язык это - возвратить. То есть мы возвращаем нужное нам значение из функции, после его уже можем распечатывать.

Пример (php)
<?php
	function getString(string $str): string // Возвращаем тип данных строку
	{
		return "Я люблю {$str}"; // Возвратит нам строку 
	}

	echo getSting('PHP'); // Распечатает нам строку 'Я люблю PHP'
?> 

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

Вы могли заметить, что я рядом с функцией указал : string — это не что иное, как type hinting (подсказка о типе). Если мы передадим числовое значение в качестве аргумента, интерпретатор выдаст нам ошибку. Если же функция вернёт не строку, а число, это также приведет к ошибке. Таким образом, мы защищаемся от неожиданных данных. Мы ожидаем строку в параметре, и, следовательно, если там будет не тип string, мы получим ошибку.

Запомните

После срабатывания return, дальнейшее выполнение функции прекращается.

Необязательные параметры

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

В следующем примере сделаем чтобы все параметры были обязательными:

Пример (php)
<?php
	function getNumber(int $num1, int $num2)
	{
		return $num1 * $num2;
	}

	echo getNumber(2, 2); // Распечатает 4
?> 

Хорошо, предположим, что передаваемое число всегда увеличивается в два раза по умолчанию. Это приведет к ошибке:

Пример (php)
<?php
	function getNumber(int $num1, int $num2)
	{
		return $num1 * 2;
	}

	echo getNumber(2); // Будет ошибка
?> 

Будет следующая ошибка: Fatal error: Uncaught ArgumentCountError: Too few arguments to function getNumber().

Исправим это, добавив значение по умолчанию:

Пример (php)
<?php
	function getNumber(int $num1, int $num2 = 2) // Изначально укажем нужное значение
	{
		return $num1 * $num2;
	}

	echo getNumber(2); // Распечатает 4
?> 

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

Именованные аргументы

Но если мы захотим изменить второй необязательный параметр, не трогая все остальные, у нас будет два варианта: первый — перечислить заново все аргументы, а второй — использовать именованные аргументы.

Изменим второй необязательный параметр:

Пример (php)
<?php
	function getString(int $num, string $site = 'Codebra', $prog = 'PHP')
	{
		return "Сайту {$site} исполнилось {$num}. Я изучаю язык программирования {$prog} ";
	}

	echo getString(num: 10, prog: 'HTML'); // Распечатает => Сайту Codebra исполнилось 10. Я изучаю язык программирования HTML 
?> 

Если уберете именованный аргумент prog, то увидите, что первый параметр изменится. В обязательных параметрах можно опускать имена, однако я не рекомендую так делать — лучше указывать их для улучшения читаемости.

Строгая проверка типов

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

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

  • строку '1' в целое число 1;
  • логическое значение true — в целое число 1;
  • логическое значение false — в целое число 0;
  • целое число 1 — в логическое значение true;
  • целое число 0 — в логическое значение false.

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

  • вызывается с аргументом неверного типа (если он был указан);
  • возвращает значение неверного типа данных (если был указан тип возвращаемого значения).

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

Пример (php)
<?php
	declare(strict_types = 1); // Вклюачаем строгую проверку
?> 

Запустите этот пример у себя со строгой проверкой и без:

Пример (php)
<?php
	 declare(strict_types = 1);
	 
	 function getString(int $number) {
		 if ($number) {
			 return '+++';
		 }
	 }

	echo getString('1');
?> 

Я думаю, вы наглядно поняли, что интерпретатор не будет автоматически переводить строку в число, а число — в булево значение, а сразу покажет вам ошибку. Строгая проверка позволяет нам допускать меньше ошибок в коде.

Важно

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

Несколько инструкций return в одной функции

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

Пример (php)
<?php
	function getStockMessage(int $stock): string
	{
		if ($stock => 10) {
			return 'Хорошая доступность';
		} elseif ($stock > 0 && $stock < 10) {
			return 'Слабая доступность'
		}

		return 'Ошибка!!!'; // Срабавает только тогда, когда не одно из условия не подошло
	}
?> 

Как только в коде функции выполняется конструкция return, интерпретатор PHP возвращается к строке кода, вызвавшей функцию. Ни один из последующих операторов в этой функции выполняться не будет.

В приведенной выше функции конструкция return вызывается три раза.

  • В условии проверяется, равно ли или больше 10 значение параметра $stock. Если условие выполняется, то обрабатывается первая конструкция return, а последующие инструкции в функции выполняться не будут.
  • Если значение параметра $stock больше 0 и меньше 10, срабатывает вторая конструкция return, и последующий код функции выполняться не будет.
  • Если функция все еще выполняется, это значит, что параметр $stock меньше либо равен нулю. В этом случае будет выполнена последняя конструкция return.

Заключение

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

Далее мы с вами изучим встроенные функции в язык PHP. Поверьте, их очень много, но мы рассмотрим только самые важные.

Задания

1. Напишите функцию sortByLength(array $strings): array, которая принимает массив строк и возвращает массив, отсортированный по длине строк (от короткой к длинной).

2. Напишите функцию isPalindrome(string $word): bool, которая проверяет, является ли заданное слово палиндромом (читается одинаково слева направо и справа налево).

3. Напишите функцию isArrayUnique(array $arr): bool, которая проверяет, содержит ли массив только уникальные значения.

4. Реализуйте функцию filterByType(array $arr, string $type): array, которая фильтрует массив, оставляя только элементы указанного типа (bool, int).

5. Создайте функцию guessNumber(int $number): string, которая генерирует случайное число от 1 до 100 и сравнивает его с введенным пользователем числом, возвращая подсказку ("больше", "меньше" или "угадал") - используйте функцию [ссылка доступна авторизованным пользователям].

6. Напишите функцию findAnagrams(string $word, array $wordList): array, которая принимает слово и массив слов, возвращая только те слова, которые являются анаграммами исходного.

Похожие уроки Codebra

@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Переменные, комментарии и типы данных в PHPКурс по PHP
Типы данных в PythonЗнакомство с Python
Генераторы и оператор yield в PythonЗнакомство с Python
Операторы switch и match в PHPКурс по PHP
Поиск хостов с помощью NmapРазведка и сканирование
Первое знакомство с PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Продолжаем написание классов в PythonЗнакомство с Python
Итоги раздела «Самые основы Python»Знакомство с Python
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию и компьютерной безопасности. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Пентесту Active Directory, Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно