Функция 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]

