Функция php, её свойства, особенности и все что с ней связано. По материалам сайта site-on.net.
Что такое функция?
Функция – это участок кода, который можно многократно выполнять в различных местах PHP скрипта (страницы).
Если какой-то участок кода php будет повторяться, то обязательно делаем из него функцию!
Внутри функции можно использовать: циклы, условия, вызывать любые функции (как встроенные, так и собственные).
function siteOn(){ // тело функции echo 'Привет всем читателям блога Site on!'; } siteOn(); — вызываем функцию в шаблонах верстки (сколько угодно раз)
Все функции глобальны, т.е. можно назначать и вызывать функцию в любом месте сайта, не только в файле functions.php. Последовательность не важна: можно сначала вызвать функцию, а потом ее назначить (кроме функций внутри других функций и функций с условием).
Проверка на существование
function siteOn(){ // любой код или без него } if(function_exists('siteOn')){ echo 'Такая функция уже есть!'; }
Аргументы функций
<?php function siteOn($author){ echo $author . ' - автор блога Site on! '; } siteOn('Сергей'); // первый способ $name = 'Андрей'; // второй способ siteOn($name); siteOn(); // ничего не передаём ?>
Функция может иметь сколько угодно аргументов, например:
<?php function siteOn($author, $blog){ echo $author . ' - автор блога '. $blog .'
'; } siteOn('Сергей', 'Site on!'); // первый способ $name = 'Андрей'; // второй способ siteOn($name, 'Сладкоешка'); siteOn('Фёдор Иванов'); // передали только 1 аргумент — будет ошибка! ?>
Аргументы по умолчанию
<?php function siteOn($author, $blog='Site on!'){ echo $author . ' - автор блога '. $blog .'
'; } siteOn('Сергей'); — Теперь можно вызвать только 1 аргумент, второй возьмет значение по-умолчанию siteOn('Сергей','Opttour'); — либо назначаем 2 переменных, и значение по-умолчанию игнорируется ?>
Функции, зависящие от условий
<?php $apply = true; sayHi(); //вызвали функцию sayHi, её можно вызывать в любом месте /*здесь нельзя вызвать функцию sayGoodbye, так как мы ещё не проверили условие и не зашли внутрь конструкции if*/ if($apply){ function sayGoodbye(){ echo 'Всем пока!
'; } } /*вот теперь можем вызвать sayGoodbye*/ sayGoodbye(); function sayHi(){ echo 'Всем привет!
'; } ?>
Вложенные функции
Вложенная функция – это функция, объявленная внутри другой функции.
<?php /*Здесь нельзя вызвать sayGoodbye, так как она появится только после вызова функции sayHi*/ sayHi(); /*вызвали функцию sayHi, её можно вызывать в любом месте*/ /*Теперь можем вызывать sayGoodbye*/ sayGoodbye(); function sayHi(){ echo 'Всем привет!
'; function sayGoodbye(){ echo 'Всем пока!
'; } } ?>
Область видимости переменных
В PHP две области видимости: глобальная и локальная.
<?php function sayHi($name){ echo 'Привет, '.$name.'!
'; $name = 'Рудь Сергей'; } $name = 'Андрей'; sayHi($name); echo $name; // выдаст Андрей, несмотря на то что последней вызывалась функция sayHi ?>
Переменная внутри функции — локальна, остальные переменные глобальные.
Обращение к глобальным переменным из локальной области видимости
<?php function sayHi($name){ echo 'Привет, '.$name.'!
'; global $name; /*начиная с этого момента мы имеем ввиду глобальную переменную $name*/ $name = 'Рудь Сергей'; } $name = 'Андрей'; sayHi($name); echo $name; // выдаст Сергей ?>
Статические переменные
Каждый раз когда мы будем вызывать функцию sayHi, счетчик $c будет считать количество (до перезагрузки страницы)
function sayHi($name){ static $c = 0; // счётчик, сделали статическим echo 'Привет, '.$name.'!
'; $c++; // увеличиваем счётчик на 1 echo 'Всего поздоровались ' . $c . ' раз.
'; }
Возврат значений
<?php function getSquare($number){ $result = $number*$number; echo $result; // показать результат return $result; // вернуть результат } getSquare(5); ?>
Return возвращает значение и прерывает работу функции, то есть весь код, который находится ниже ключевого слова return никогда не исполниться.
Рекурсивная функция
Рекурсивная функция – это функция, которая вызывает сама себя. Не рекомендуется использовать, ресурсоёмкая.
<?php function countPlease($number){ echo $number . '
'; if($number < 20){ // чтобы рекурсия не стала бесконечной countPlease(++$number); // функция countPlease вызвала сама себя } } countPlease(1); ?>
Результатом данной функции будет перебор чисел от 1 до 20.
[site-socialshare]