Перейти к содержимому

Как декларировать функцию в php

  • автор:

Как декларировать функцию в php?

Функции в PHP декларируются с помощью ключевого слова function :

 function myFunction()  // Код функции > 

Есть что добавить? Зарегистрируетесь

Курсы по программированию на Хекслете

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Похожие вопросы

12 декабря 2022

12 декабря 2022

12 декабря 2022

12 декабря 2022

  • 8 800 100 22 47 бесплатно по РФ
  • +7 495 085 28 38 бесплатно по Москве

Направления

  • Курсы «Backend-разработка»
  • Курсы «Frontend-разработка»
  • Курсы «Создание сайтов»
  • Курсы «Тестирование»
  • Курсы «Аналитика данных»
  • Интенсивные курсы
  • Курсы DevOps
  • Курсы «Веб-разработка»
  • Курсы «Математика для программистов»
  • Все курсы

О Хекслете

  • О нас
  • Карьера в Хекслете
  • Хекслет Колледж
  • Сведения об образовательной организации
  • Лицензия № Л035-01216-73/00668844

ООО «Хекслет Рус» 432071, г. Ульяновск, пр-т Нариманова, дом 1Г, оф. 23 ОГРН 1217300010476

  • Справка
  • Вопросы и ответы
  • Сообщество
  • Дополнительно
  • Условия использования
  • Соглашение об обработке ПД
  • Оферта
  • Акции

Как декларировать функцию в php

Приведём пример синтаксиса, используемого для описания функций:

Пример #1 Псевдокод для демонстрации использования функций

function foo ( $arg_1 , $arg_2 , /* . */ $arg_n )
echo «Пример функции.\n» ;
return $retval ;
>
?>

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

Имена функций следуют тем же правилам, что и другие метки в PHP. Корректное имя функции начинается с буквы или знака подчёркивания, за которым следует любое количество букв, цифр или знаков подчёркивания. В качестве регулярного выражения оно может быть выражено так: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$ .

Подсказка

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

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

Пример #2 Функции, зависящие от условий

/* Мы не можем вызвать функцию foo() в этом месте,
поскольку она ещё не определена, но мы можем
обратиться к bar() */

if ( $makefoo ) function foo ()
echo «Я не существую до тех пор, пока выполнение программы меня не достигнет.\n» ;
>
>

/* Теперь мы благополучно можем вызывать foo(),
поскольку $makefoo была интерпретирована как true */

if ( $makefoo ) foo ();

function bar ()
echo «Я существую сразу с начала старта программы.\n» ;
>

Пример #3 Вложенные функции

function foo ()
function bar ()
echo «Я не существую пока не будет вызвана foo().\n» ;
>
>

/* Мы пока не можем обратиться к bar(),
поскольку она ещё не определена. */

/* Теперь мы можем вызвать функцию bar(),
обработка foo() сделала её доступной. */

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

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

Замечание: Имена функций регистронезависимы для символов ASCII от A до Z , тем не менее, предпочтительнее вызывать функции так, как они были объявлены.

Функции PHP поддерживают как списки аргументов переменной длины, так и значения аргументов по умолчанию. Смотрите также описания функций func_num_args() , func_get_arg() и func_get_args() для более детальной информации.

Можно вызывать функции PHP рекурсивно.

Пример #4 Рекурсивные функции

function recursion ( $a )
if ( $a < 20 ) echo " $a \n" ;
recursion ( $a + 1 );
>
>
?>

Замечание: Рекурсивный вызов методов/процедур с глубиной более 100-200 уровней рекурсии может вызвать переполнение стека и привести к аварийному завершению скрипта. В частности, бесконечная рекурсия будет считаться программной ошибкой.

User Contributed Notes

There are no user contributed notes for this page.

  • Функции
    • Функции, определяемые пользователем
    • Аргументы функции
    • Возврат значений
    • Обращение к функциям через переменные
    • Встроенные функции
    • Анонимные функции
    • Стрелочные функции
    • Callback-​функции как объекты первого класса
    • Copyright © 2001-2023 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    Функции в PHP. Краткое руководство

    Функция — это блок кода, который может быть именован и вызван повторно. Иногда функцию ещё называют подпрограммой.

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

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

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

    Типы функций

    Разделяют два типа функций — встроенные и пользовательские.

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

    Одна из хорошо знакомых функций — функция, которая выводит переданный ей текст на экран — print() .

    Пользовательские функции программист создаёт самостоятельно. Эти функции используются только внутри одного проекта или сценария.

    Анатомия функций

    Работа с функциями состоит из объявления и использования.

    Перед тем как использовать новую функцию, следует её объявить:

    () < return ; > 

    Пояснить все составные части функции проще всего на примере.

    Допустим, на своём сайте мы хотим показывать, является ли выбранный пользователем год високосным. Для этого напишем функцию, в которую передаётся год. В результате работы функции мы хотим получить значение «истина», если год високосный, и «ложь» — если нет.

    Определение такой функции:

     elseif ($year % 100 == 0) < if ($year % 400 == 0) < return true; >else < return false; >> else < return true; >> 

    Пример использования функции:

     else

    Потренироваться использовать функции в PHP можно в этом тренажёре.

    Аргументы функции и область видимости

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

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

    Аргументы функции — это переменные, которые функция может получить из внешнего кода. В примере с is_leap_year такая переменная была только одна — $year .

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

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

    «Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

    Читать дальше

    Как работает протокол HTTP

    Как работает протокол HTTP

    HTTP был разработан в 1990-х годах для создания первого интерактивного текстового веб-браузера. За эти годы протокол менялся и совершенствовался, становился более гибким и постепенно превратился в современный интернет. В статье рассмотрим принцип работы протокола и что важно знать о нём разработчику.

    • 8 февраля 2023

    10 популярных функций в MYSQL, которые вам нужно знать

    10 популярных функций в MYSQL, которые вам нужно знать

    Без лишних слов принесли вам некоторые популярные функции MySQL, без которых вы точно не обойдётесь в работе.

    • 17 января 2023

    Подключение файлов в PHP. Метод require()

    Подключение файлов в PHP. Метод require()

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

    • 21 ноября 2022

    Массивы в PHP

    Массивы в PHP

    Массив — это ещё один тип данных, вроде числа или строки. Главное отличие массива от остальных типов данных заключается в его способности хранить в переменной больше одного значения. В предыдущих примерах имя переменной всегда ассоциировалось только с одним значением:

    • $name = «Иннокентий»
    • $age = 42

    А если мы хотим узнать не только пол, имя и возраст пользователя, но и, допустим, любимые сериалы? Очень непросто назвать один самый любимый сериал, а вот вспомнить несколько — намного легче. Сохранение в переменную-массив нескольких значений выглядит так:

     $fav_shows = ["game of thrones", "american horror story", "walking dead"]; 

    В этом примере мы сохранили в переменной $fav_shows сразу три значения. Но сохранить эти данные — это только половина дела. Как с ними потом работать? Уже знакомый вам способ вывода переменной на экран не будет работать с массивами:

    Так увидеть список любимых сериалов не получится. Дело в том, что массив — это не обычная переменная. Массив хранит не простые типы, вроде текста или чисел (их ещё называют «скалярными типами»), а более сложную структуру данных, поэтому здесь нужен особый подход.

    Внутри массива у каждого значения есть адрес, по которому к нему можно обратиться. Такой адрес называется индексом. Индекс — это просто порядковый номер значения внутри массива. Индексация начинается с нуля, так что первый элемент получает индекс — 0 , второй — 1 , и так далее.

    Чтобы получить определенный элемент массива, необходимо знать его индекс (ключ). Напечатаем названия всех сериалов из массива через запятую:

    Теперь можно дать определение массива: Массив — это совокупность множества элементов вида «ключ: значение».

    Массивы позволяют перезаписывать существующие значения и добавлять новые. Добавить новое значение в массив можно так:

    $fav_shows[] = "the big bang theory"; 

    Новый элемент автоматически получит индекс равный максимальному индексу из существующих + 1. «Теория большого взрыва» сохранится в массиве под индексом 3 .

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

    $fav_shows[4] = "fargo"; 

    Для полного удаления (без замены на другое) значения по его индексу существует функция unset :

    unset($fav_shows[4]); 
    • 10 ноября 2022

    Синтаксис PHP

    Синтаксис PHP

    Разберёмся, из чего состоит любой язык программирования.

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

    • 27 октября 2022

    Массивы $_POST и $_GET в PHP. Обработка форм

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

    Через формы можно отправлять как простую текстовую информацию, так и файлы.

    Большую часть времени программирования на PHP вы будете так или иначе работать с формами и данными из них.

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

    PHP содержит множество средств для работы с формами. Это позволяет очень просто решать типичные задачи, которые часто возникают в веб-программировании:

    • Регистрация и аутентификация пользователя;
    • Отправка комментариев на форумах и социальных сетях;
    • Оформление заказов.

    Практически любой современный сайт содержит как минимум несколько разных HTML-форм.

    • 20 октября 2022

    Учебник по PHP

    Учебник по PHP

    1. Знакомство с языком
      • Что такое PHP
      • Синтаксис PHP
      • Массивы
      • Циклы
      • Функции
    2. Шаблонизация и подключение файлов
      • Подключение файлов
      • Шаблонизация
    3. Протокол HTTP и формы
      • Протокол HTTP
      • Формы
      • Уязвимости
    4. Идентификация пользователя на сайте
      • Аутентификация пользователя
    5. Базы данных
      • База данных
      • SQL
      • MySQL в PHP
      • Безопасность в MySQL
    6. Объекты и использование библиотек
      • Объекты
      • Библиотеки
      • Composer
    • 10 сентября 2022

    Шаблонизация в PHP

    Шаблонизация в PHP

    Шаблонизация — это работа по интеграции готовой, статичной вёрстки на сайт.

    Ведя работу над сайтом, написанном на PHP, мы разрабатываем логику, которая управляет представлением. Логика — это PHP-сценарии, где происходит объявление переменных, функций, использование массивов и циклов, получение и обработка информации.

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

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

    • 10 сентября 2022

    Протокол HTTP и работа с заголовками

    Протокол HTTP и работа с заголовками

    Весь современный веб построен на модели взаимодействия клиента и сервера. Как она работает:

    • браузер пользователя (клиент) отправляет на сервер запрос с адресом сайта (URL);
    • сервер получает запрос и отдаёт клиенту запрошенный контент.

    Для реализации процесса используется универсальный протокол HTTP.

    • 10 сентября 2022

    Защита от SQL-инъекций

    Защита от SQL-инъекций

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

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

    • 10 сентября 2022

    Функции в PHP

    loader

    Всем привет! В этом уроке мы познакомимся с таким понятием как функции в языке PHP. Функции – вещь довольно простая. Она представляет собой кусок кода, который принимает определенные параметры и на выходе возвращает какой-либо результат. Можно написать функцию один раз, а затем использовать её в различных местах. Таким образом вам не нужно будет дублировать код, если что-то нужно сделать дважды, или трижды, или сколько угодно раз. Вообще, функции в PHP можно сравнить с функциями в математике.

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

    Например, нам нужен косинус числа 3.14. Легко! Для этого в PHP есть функция cos.

    • Привет, мир!
    • Развернуть строку
    • Чётные числа
    • Числа Фибоначчи
    -0.99999873172754

    Есть очень много функций для работы со строками. Например, можно в строке заменить одни символы другими, для этого есть функция str_replace. Например, давайте в строке “abracadabra” заменим все буквы “a” на “o”.

    obrocodobro

    Документация по стандартной библиотеке функций (SPL) доступна на официальном сайте — http://php.net/manual/ru/funcref.php. Большинство из них имеет описание на русском языке. Разумеется, все их запомнить невозможно, однако нужно уметь их находить. И это, как правило, не составляет труда. Например, если вбить в google “заменить символы в строке php” то в выдаче будет ссылка на официальную документацию, там и смотрите.

    • Тест на знание основ HTML
    • Тест на знание основ PHP
    • Тест на знание ООП в PHP

    Поиск функций в PHP

    Вообще, гуглить и брать уже готовый код – это хороший подход, который экономит ваше время. В этом нет ничего плохого – скорее всего вы найдёте лучшее решение задачи, чем то, которое бы написали сами. Научитесь на готовых примерах, а со временем запомните наиболее частые подходы для разных случаев. Здесь главное – постоянная практика.

    Пользовательские функции: пишем свою первую функцию

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

    function имяФункции (аргумент1, аргумент2)

    У функции обязательно должно быть имя. У всех функций должны быть разные имена и имя вашей функции не может называться так же, как и встроенная в PHP функция. Аргументов может быть сколько угодно, в том числе и 0. Функция может что-то возвращать, для этого перед результатом пишется слово return. После него функция завершает свою работу. А может и не возвращать, а, например, изменять свои аргументы, или выводить информацию на экран. Именуются функции так же, как и переменные — camelCase`ом. Подробнее об этом я писал тут — https://php.zone/post/726. Именовать их нужно так же осмысленно – то что функция делает, то и нужно писать в имени.

    Давайте рассмотрим пример создания простейшей функции в PHP. Пусть она принимает на вход два числа и возвращает их сумму.

    Окей, функцию написали, теперь можно её вызвать и посмотреть на результат её работы.

     $a = 5; $b = 10; echo getSum($a, $b) . '
    '; echo getSum(-3, 4);
    • Привет, мир!
    • Развернуть строку
    • Чётные числа
    • Числа Фибоначчи
    15 1

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

    Области видимости

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

     $x = 3; $y = 5; echo getSum($x, $y);

    Данный код абсолютно рабочий. Здесь переменные $x и $y внутри функции getSum живут сами по себе, а переменные с такими же именами за пределами функции – отдельно, и они ничего друг о друге не знают. При вызове функции значение передаваемого аргумента будет скопировано в локальную переменную, а после выхода из функции это значение будет удалено. То есть здесь при вызове getSum мы просто копируем значения 3 и 5 в локальные переменные $x и $y. С этого момента внутри функции внешние переменные перестают существовать, и она знает только о своих переменных.

    Параметры функции: передача аргументов по ссылке и по значению

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

    Передача параметров по ссылке

    Однако можно передать аргумент по ссылке. Делается это при помощи знака & перед именем аргумента.

    function func(&$x)

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

     $a = 3; plus5($a); echo $a;

    То есть для значения переменной $a внутри функции появилось ещё одно имя — $x. Сейчас оба этих имени указывают на одно и то же значение. И если мы изменим значение переменной внутри функции, то оно изменится также и снаружи!

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

     $a = 3; plus5($a); echo $a;

    Здесь при вызове функции значение переменной $a было просто скопировано в локальную переменную $x. Внутри функции мы изменили $x, прибавив к нему число 5, а затем работа функции была завершена. Локальная переменная $x перестала существовать, а мы никак не повлияли на переменную $a.

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

    Начинаем использовать тайп-хинтинг (type hinting) в PHP

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

    Вот так, теперь при передаче любых значений в функцию, они автоматически будут приведены к числам. Давайте это проверим – вставим вызов функции var_dump внутри нашей функции, и посмотрим, что получится.

     echo getSum(5, 10);
    int 5 int 10 15

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

     echo getSum(12.5, 10);

    После выполнения мы увидим следующее:

    int 12 int 10 22

    То есть в тот момент, когда аргумент пришёл в функцию, он был уже нужного типа. Давайте попробуем убрать указание типа из аргумента:

     echo getSum(12.5, 10);

    Теперь дробное число не будет приведено к целому, и мы получим другой результат:

    float 12.5 int 10 22.5

    В этом курсе мы всегда будем использовать указание типов. Это помогает писать более строгий код и позволяет допускать меньше ошибок. Посудите сами – если мы работаем с конкретным типом, мы более уверены в том, как будет работать тот или иной код.

    Строгая типизация

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

    declare(strict_types=1);

    Она указывается в начале PHP-файла. Наш код примет следующий вид:

     echo getSum(12.5, 10);

    Ошибка при передаче некорректного типа

    При этом, если его сейчас запустить, то произойдёт ошибка с типом TypeError.

    Как тут написано, первый аргумент, переданный в getSum() обязан быть типа integer, а передан с типом float. Это и есть строгая типизация в PHP. Использовать её в рамках данного курса мы не будем, да и в профессиональной разработке на PHP этот функционал пока не используют. Но не рассказать о ней я не мог, вполне возможно, что это могут спросить при собеседовании на работу. А сейчас убираем строку declare(strict_types=1); из нашего кода и идём дальше.

    Функции без аргументов

    Как я говорил, функция может вообще не иметь аргументов. Таковой, например, является стандартная функция rand() – она просто возвращает случайное число.

    Давайте её попробуем в действии:

    Случайное число: 9582

    Давайте запустим ещё раз этот же самый код:

    Случайное число: 7324

    Работает. А давайте теперь напишем свою функцию, которая тоже не принимает аргументов, и возвращает синус случайного числа:

     echo 'Синус случайного числа: ' . getSinOfRandom();
    Синус случайного числа: 0.6586666790617

    Функция внутри функции

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

     echo getSumOfCos(1.44, 2);

    Здесь мы использовали функцию cos() из стандартной библиотеки внутри нашей собственной функции. А можно ли вызывать свои же функции из других своих функций? Да легко!

     function getSumOfCos(float $x, float $y) < $cosX = cos($x); $cosY = cos($y); return getSum($cosX, $cosY); >echo getSumOfCos(1.44, 2);

    Здесь мы определили 2 разные функции, и во второй начали использовать первую. Разумеется, эти примеры довольно искусственны. И вы можете подумать, что использовать здесь функции излишне. Ведь можно же просто заменить этот код следующим выражением:

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

     $y) < return $x; >else < return $y; >> $a = 5; $b = 8; echo 'Наибольшее число: ' . getMax($a, $b);
    Наибольшее число:8

    Код данной функции можно упростить, так как если $x не больше $y, то мы в любом случае вернём $y. Поэтому можно убрать блок else:

     $y) < return $x; >return $y; > $a = 5; $b = 8; echo 'Наибольшее число:' . getMax($a, $b);

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

    Давайте передадим первым аргументом большее число:

     $y) < return $x; >return $y; > $a = 10; $b = 8; echo 'Наибольшее число: ' . getMax($a, $b);
    Наибольшее число: 10

    Выполнилось первое условие и вызвался return $x. Всё, до return $y дело не дошло.
    Упрощение заключается в том, что чем меньше уровней вложенности в коде, тем проще его читать и понимать. Видите, как плотно пересекается весь изученный материал? В данном случае с темой условий в PHP.

    Рекурсивные функции

    Рекурсия в картинках

    Ох, чувствую, сейчас повеселимся. Осторожно! Если при чтении этого раздела у вас начнут закипать мозги — переходите к следующему уроку, рекурсию можно освоить и в конце курса. Не парьтесь, в общем, если не будет получаться, вы такие не одни =)

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

    Например, нам нужно возвести число в степень. Предположим, у нас для этого есть определённая функция. Назовём её power. И пусть она принимает 2 аргумента:

    • число, которое нужно возвести;
    • степень, в которую нужно возвести.

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

    power(2, 3)

    Согласитесь, что power(2, 3) равносильно 2 * power(2, 3 — 1). То есть мы можем умножить число, возводимое в степень, на вызов этой функции, и уменьшить при этом степень на единицу.

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

    power($x, $n) = $x * power($x, $n – 1)

    Тогда для возведения 2 в степень 3 получим:

    1. power(2, 3) = 2 * power(2, 2)
    2. power(2, 2) = 2 * power(2, 1)
    3. power(2, 1) = 2 * power(2, 0)

    Число в нулевой степени равно единице. Здесь нам нужно остановиться.

    Давайте реализуем это с помощью кода:

     // В остальных случаях - умножаем число на возведённое в степень n - 1 и возвращаем его return $x * power($x, $n - 1); > echo power(2, 3);

    Да, функция будет вызывать сама себя. Таким образом, можно прийти к тому, что рекурсия полезна, когда вычисление функции можно свести к её более простому вызову, а его – ещё к более простому, и так далее, пока мы не достигнем в аргументах какого-то конечного значения (в нашем примере — число 0). Чтобы понять, как всё работает пошагово, можно добавить вызов var_dump в начале функции и посмотреть, какие аргументы ей передаются на каждом из шагов.

     // В остальных случаях - умножаем число на возведённое в степень n - 1 и возвращаем его return $x * power($x, $n - 1); > echo 'Результат: ' . power(2, 3);

    Вывод получится следующим:

    int 2 int 3 int 2 int 2 int 2 int 1 Результат: 8

    Таким образом, мы видим, что функция была вызвана трижды, и мы видим, какими были значения аргументов на каждом вызове. Надеюсь, тут всё понятно. Если же нет (а при изучении рекурсии это происходит довольно часто) – пишите ваши вопросы в комментариях, помогу. А ещё можете пошагово разбирать ход программы на листочке – тоже часто помогает.

    Давайте для закрепления разберём ещё один пример с рекурсией. Например, мы будем передавать в функцию какое-то число $n, а она будет считать сумму всех чисел от единицы до этого числа. Назовём эту функцию getSumOfNumbersFromZero($n).

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

    getSumOfNumbersFromZero(5);

    Как можно догадаться, этот вызов можно представить как

    5 + getSumOfNumbersFromZero(4)

    Или в общем случае

    getSumOfNumbersFromZero($n) = $n + getSumOfNumbersFromZero($n - 1)

    И так до тех пор, пока $n не станет равен 1.

    Давайте реализуем это с помощью рекурсивной функции:

     // В остальных случаях - прибавляем текущее число к сумме всех предыдущих return $n + getSumOfNumbersFromZero($n - 1); > echo 'Результат: ' . getSumOfNumbersFromZero(5);
    Результат: 15

    Всё верно! Ну, хватит рекурсии, а то я уже слышу, как у вас закипают мозги.
    Очень надеюсь, что вам понравился урок. Если это так – буду рад, если вы поделитесь им в социальных сетях или расскажете друзьям. Это лучшая поддержка проекта. Спасибо тем, кто это делает. Если у вас возникли какие-то вопросы или замечания – напишите об этом в комментариях. А сейчас – делаем домашнее задание, варианты ваших решений можете писать в комментариях, я их проверю и скажу, всё ли правильно. Всем пока!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *