Функция внутри функции php. Функции в PHP
В этой статье мы продолжаем изучение основ PHP и перейдем к такой очень важной части в изучении этого языка программирования, как функции. Функции PHP повсеместно применяются в построении сайтов, поэтому знание их основ является обязательным. В рамках данной статьи мы рассмотрим основы функций PHP, узнаем, как можно применять функции на практике, а также рассмотрим функции с параметрами и без них. Данного материала будет достаточно для изучения основ работы с функциями PHP, после чего вы сможете приступить к дальнейшему изучению данного языка программирования.
Итак, функция – это набор специальных команд, которые выполняться определенным образом и выдают определенный результат. При этом функция имеет определенное имя и может использоваться в любом месте страницы. Для этого достаточно просто вызвать нужную функцию в нужном месте страницы. Синтаксис функций PHP имеет следующий вид.
Function имя_функции (параметры) { Тело функции }
Для лучшего усвоения давайте рассмотрим следующий пример. У нас есть здание и известна его высота. Нам нужно рассчитать время свободного падения предмета, брошенного с этого здания. Будем считать, что условия идеальны. Для решения этой задачи используем следующую функцию.
Function mytime($h, $g) { $t = pow(2*$h/$g, 0.5); echo "Время падения с высоты ".$h." при g = ".$g." составляет ".$t." секунд."; } mytime(100, 9.81);
Теперь давайте разберем приведенный выше код. Сначала мы создаем новую функцию mytime . Для этого прописываем специальное слово function, после которого указываем имя создаваемой функции. Также рядом в скобках через запятую не забываем указать параметры для создаваемой функции PHP. Если таких параметров нет, то их можно не указывать и оставить скобки пустыми. Далее с новой строки открываем фигурные скобки и прописываем в них тело функции. В нашем случае это формула для расчета времени свободного падения. Для этого создаем переменную $t, а в качестве значения присваиваем ей формулу расчета времени свободного падения.
После этого полученный результат выводим на экран при помощи . Теперь, если нам необходимо рассчитать время свободного падения, достаточно просто в нужном месте php-файла вызвать нашу php функцию, а в качестве параметров (в скобках) указать значение нужной нам высоты и и ускорения свободного падения.
Как видите, функции имеют очень большое практическое значение при . С их помощью можно гибко расширять уже готовую функциональность сайтов. В качестве примера можно рассматривать создание . Если вы читали эту статью, то могли заметить, что постраничная навигация реализована при помощи специальной функции PHP, которая вызывается в нужном месте шаблона WordPress.
Теперь давайте перейдем к рассмотрению еще одного варианта применения функций на примере ссылок. Для наглядности рассмотрим два примера функций – с параметрами и без них.
Функции PHP с параметрами и без параметров
В предыдущем примере про время свободного падения мы рассматривали функцию с параметрами. В нашем случае это были переменные $h и $g. В PHP можно применять также функции без параметров. В этом случае после названия функции в скобках ничего не пишется. Примером такой функции будет функция, выводящая какое-то уже готовое решение, например, ссылку или текст.
Результат:
Переменная $c не запоминает своего значения, она каждый раз создаётся заново. Нам нужно сделать так, чтобы наша локальная переменная $c запоминала своё значение после выполнения функции, для этого используют ключевое слово static :
// счётчик, сделали статическим
echo "Привет, ".$name."!
";
$c++; // увеличиваем счётчик на 1
echo "Всего поздоровались " . $c . " раз.
"; } sayHi("Рудь Сергей"); sayHi("Андрей"); sayHi("Дмитрий");
Результат:
Возврат значений
В функциях есть такая удобная вещь, как возврат значений. Это когда функция вместо того, чтобы вывести что-нибудь на экран, помещает всё в переменную и отдаёт эту переменную нам. А мы уже дальше решаем, что с ней делать. Для примера возьмём эту функцию, она возводит число в квадрат:
Результат:
Сделаем так, чтобы вместо вывода на экран она возвращала результат выполнения. Для этого используется ключевое слово return:
Результат:
Теперь мы можем использовать это различными способами:
//выводит результат
echo "
";
$num = getSquare(5);
echo $num;
Результат:
Обращаю ваше внимание, что ключевое слово return не просто возвращает значение, а полностью прерывает работу функции, то есть весь код, который находится ниже ключевого слова return никогда не исполниться. Другими словами, return для функций вдобавок работает как break для циклов:
echo "До меня PHP никогда не дойдёт:(";
}
echo getSquare(5); //выводит результат
echo "
";
$num = getSquare(5); // присвоили результат в переменную
echo $num; // вывели переменную на экран
Результат:
То есть return – это ещё и выход из функции. Его можно использовать и без возвращаемого значения, только ради выхода.
Рекурсивная функция
Рекурсивная функция – это функция, которая вызывает сама себя. Рекурсия используется не часто и считается ресурсоёмкой (медленной) операцией. Но бывает, что использование рекурсии самый очевидный и простой вариант. Пример:
"; if($number < 20){ // чтобы рекурсия не стала бесконечной countPlease(++$number); // функция countPlease вызвала сама себя } } countPlease(1);
Результат:
Если вы знаете, как обойтись без рекурсии, то лучше так и сделать.
Строгая типизация в PHP (уточнение типа)
В PHP сделаны мелкие шаги к строгой типизации, благодаря этому мы можем заранее указать, какой тип должна принимать функция (это называется type-hint ):
Результат:
Catchable fatal error: Argument 1 passed to countPlease() must be an array, integer given, called in /home/index.php on line 7 and defined in /home/index.php on line 3
Ошибка нам говорит, что функция ожидает принять массив, а вместо этого мы ей передаём число. К сожалению, пока что мы можем уточнять тип только для (array), а с PHP 5.4 ещё добавился такой вариант как callable :
Callable проверяет, может ли переданное значение быть вызвано в качестве функции. Callable может быть как именем функции, заданным строковой переменной, так и объектом и именем вызываемого метода. Но про объекты и методы мы поговорим позже (это раздел объектно-ориентированного программирования), а с функциями вы уже знакомы. Результат работы я вам показать не могу, так как у меня сейчас стоит PHP 5.3, но он был бы:
Вызвали функцию getEcho
Использование аргументов переменной длины
И напоследок ещё один очень редко используемый нюанс. Представьте ситуацию, мы передаём в функцию аргументы, хотя в функции мы их не описали, например:
Результат:
Как видите, ошибок нет, но и наши переданные аргументы нигде не используются. Но это не значит, что они пропали – они всё равно передались в функцию и мы можем их использовать, для этого существуют встроенные функции PHP:
func_num_args()
- Возвращает количество аргументов, переданных функции
func_get_arg(порядковый номер)
- Возвращает элемент из списка аргументов
func_get_args()
- Возвращает массив, содержащий аргументы функции
"; echo func_get_arg(0) ; } $age = 22; getEcho("Рудь Сергей", $age);
Результат:
Заключение
Сегодняшняя статья является заключительной по теме функций в PHP. Теперь вы можете быть уверены в полноте своих знаний касательно этой темы и можете смело использовать функции для своих нужд.
Если у кого-то есть желание набить руку, но нет идей как это сделать – лучшим способом будет написание уже готовых (встроенных) функций PHP, например, можно написать собственную функцию count() или любую другую.
Благодарю всех за внимание и до новых встреч! Если что-то не понятно, смело задавайте ваши вопросы в комментариях!
Последнее обновление: 1.11.2015
Функции представляют собой набор инструкций, выполняющих определенное действие.
Синтаксис определения функции:
Function имя_функции([параметр [, ...]]) { // Инструкции }
Определение функции начинается с ключевого слова function , за которым следует имя функции. Имя функции должно начинаться с алфавитного символа или подчеркивания, за которыми может следовать любое количество алфавитно-цифровых символов или символов подчеркивания.
После имени функции в скобках идет перечисление параметров. Даже если параметров у функции нет, то просто идут пустые скобки. Затем в фигурных скобках идет тело функции, содержащее набор инструкций.
Определим простейшую функцию:
Function display() { echo "вызов функции display()"; }
Данная функция не имеет параметров и все, что она делает - это вывод на страницу некоторого сообщения.
Чтобы функция сработала, ее надо вызвать. Теперь вызовем функцию:
Возвращение значения и оператор return
Функция может возвращать некоторое значение - число, строку и т.д., то есть некоторый результат. Для возвращения значения в функции применяется оператор return , после которого указывается возвращаемое значение. Например:
Функция get() возвращает число, представляющее сумму квадратов от 1 до 9. Это число хранится в переменной $result . Благодаря оператору return мы можем присвоить значение, возвращаемое функцией get, какой-нибудь переменной: $a = get(); .
Использование параметров
Создадим функцию с параметрами:
Так как теперь функция $get использует параметры, то мы должны передать при вызове этой функции на место параметров некоторые значения. Если при вызове мы укажем значения не для всех параметров, то это будет ошибка, например: $a = get(1); .
Но мы можем использовать значения по умолчанию для параметров. Например:
В этом случае, если мы не укажем значение для второго параметра, то по умолчанию он будет равен 10.
Передача по ссылке
В примере выше мы передавали параметры по значению . Но в PHP есть и другая форма передачи параметров - по ссылке . Рассмотрим два этих способа передачи параметров и сравним. Стандартная передача параметра по значению:
\$number равно: $number"; function get($a) { $a*=$a; echo "Квадрат равен: $a"; } ?>
После вызова функции get() значение переменной $number не изменится, так как в эту функцию в качестве параметра мы передаем значение переменной.
\$number равно: $number"; function get(&$a) { $a*=$a; echo "Квадрат равен: $a"; } ?>
При передаче по ссылке перед параметром ставится знак амперсанда: function get(&$a) . Теперь интерпретатор будет передавать не значение переменной, а ссылку на эту переменную в памяти, в итоге, переменная $number после передачи на место параметра &$a также будет изменяться.