Функции function в php

Функции function в php

Функции function в php

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

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

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

function функция

Запишем функцию в которой сделаем вычисления и выведем их.

function lol(){ // создали функцию с именем lol
$sum = 3+4+5; // в переменной сделали вычисления
echo "улыбнись $sum раз"; // и вывели результат в внутри функции
}
 
  lol(); // вывели функцию по имени. Смешно для этого писать функцию.

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

function имя_функции( параметр1, параметр2) {

$переменная = параметр1 + параметр2; // работа функции.

return $переменная; // возвращаем результат.

}
echo имя_функции(аргумент3, аргумент4);
//выводим результат работы, передавая аргументы в функцию. Как вы видите параметры и аргументы разные.

Параметры и аргументы в функции

Начнем с самой простой функции, для понимания как что работает. Передадим функции подсчет фруктов. Главное что нужно уяснить, что объявленные переменные вне функции и переменные внутри функции не имеют друг к другу никакого отношения. Аргументы в параметры передается по очереди, а не по имени. Записываем.

$gr = 5; // 5 груш 
$ap = 5; // и 5 яблок
function fruct($grushi , $aplle){ //Записываем в параметры как вы видите другие переменные
$sum = $grushi + $aplle; // делаем расчет
return $sum; // возвращаем результат работы.
}
 
  echo fruct($gr , $ap); // а здесь мы через аргументы передаем в работу функции данные из переменных и тут же выводим результат работы функции.

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

Глобальная переменная в функции.

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

$gr = 5; // 5 груш
$ap = "5 яблок"; // и 5 яблок
function fruct($apple) { // Передаем в параметры один аргумент только от переменной яблок
global $gr;    // создали глобальную переменную груш,  которая одинаковая как внутри так и снаружи функции.
return $gr + $apple;  // возвращаем сразу результат
} 
echo fruct($ap); //  передали один аргумент, а получили результат суммы фруктов. 

Такая запись выведет не критическую ошибку из за изменений в php-8 .

Улучшенное сравнение строк и чисел
Теперь при сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае число преобразуется в строку и используется сравнение строк. 

Ошибки согласованности типов для встроенных функций
В PHP 8 большинство внутренних функций теперь выбрасывают исключение Error, если при проверке параметра возникает ошибка.
Так как мы работаем с переменной $ap как с integer, а она у нас записана в кавычках как string. 

Условия внутри функций 

Создадим условие, каких фруктов меньше и выведем результат.

$gr = '6 груш'; // 6 груш
$ap = '5 яблок'; // и 5 яблок
function fruct($ap, $gr) { // Передаем в параметры аргументы груш и яблок
if ($gr <= $ap) { // сверяем каких фруктов меньше либо равно.
return "$gr груш&nbsp;меньше";  // возвращаем сразу результат если груш.
} 
return "$ap яблок меньше"; // и если яблок меньше.
} 
echo fruct($ap , $gr); // передали один аргумент, а получили результат каких фруктов меньше. 

Передадим еще один аргумент. выведем его в краткой записи php с тегами html. Не забудьте закрыть код php перед этой записью.

<h2> <?= fruct($gr=12 , $ap=11) ?> </h2> 

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

Передаем аргументы (4, 7, 3) Принимает параметр (1, 2, 3), а уже в функции, параметры передают в условие по названию переменной (1, 2, 3). Так у нас функция принимает из параметра $gr груши и в условие первым идет, если груш меньше, а переменная $gr принимает из второго аргумента. Поэтому произошла и смена мы думали что передавали груши, а получили яблоки.

Создавать глобальные переменные внутри функций не рекомендуется, как и выводить результат внутри функции echo, лучше возвращать результат return

Переменные внутри функции, ссылка на переменную в параметре. 

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

function fruct($apple , &$g) { // Передаем в параметры $g и добавили ссылку аргументов $gr/ 
$g += 10;  // к переменной внутри со значением 10 прибавили переменную по ссылке из вне со значением 5.
return $g + $apple; // возвращаем сразу результат
}
echo fruct($ap , $gr); // получаем 15, так как в параметры  &$gr попадают данные из переменной внутри функции.

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

$c = 10; // создаем переменную внутри и  присваиваем значением 10.
$p = $c + $g; // создаем переменную где складываем переменную внутри с переменной груши снаружи
return $p + $apple; // возвращаем сразу результат в котором к сумме двух переменных добавляем яблоки.  

Первый вариант с ссылкой на параметр переменной намного проще.

Параметр функции по умолчанию

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

$lim = 11;
function fruct($grushi , $aple , $lim=0){ // добавили лимон, если мы зададим ему число, то оно будет в подсчете, хотя никакого аргумента мы не передавали. Попробуйте изменить ноль на число.
$sum = $grushi + $aple + $lim; // мы сразу добавили лимон в подсчет фруктов.
return $sum; // возвращаем результат.
}
echo fruct($gr , $ap ) .'<p>' ; // а здесь мы не указали третий аргумент но ошибки нет, так как переменной лим есть значение по умолчанию 0.
echo fruct($ap , $lim) .'<p>' ; // передаем в аргументы данные из переменных яблоки и лимоны и получаем 14. Так как выше мы уже добавили аргумент в груши, то и ошибки нет.

Тайп хинтинг (указание типов аргументов)

Тайп хинтов (type hints). Мы можем указать, какой тип данных должен быть у аргумента передаваемого в параметр. С версии php-7 можно указать тип как для одного из параметров так и для функции. Для функции записываем за параметрами через двоеточие: int

Пример.

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

Пример: Меньше всего фруктов.

$a = '4 яблок';  $b = '16 груш';   $c = '9 слив'; // допустим мы сразу ввели с количеством название фруктов.
fruct ($a , $b , $c);  // создали аргументы в которых передадим количество и название.
function fruct($a , $b , $c) : int   {   // принимаем данные в параметры и указали для приема тип число.
if ($a <= $b && $a <= $c) {  // создаем условие когда а меньше или равно б и а меньше или равно c 
echo " меньше всего $a  <p>";} // показываем меньше всего а
elseif ($b < $a && $b < $c){  // еще если б меньше а, и б меньше с
echo "меньше всего  $b <p>";  // выводим меньше всего б 
}
else  { 
echo "меньше всего $c  <p>";  // иначе меньше всего с.
 
}}

И получаем (меньше всего 16 груш) и ошибку, так при сравнении php посчитал только 1, а не 16. Если мы пропишем для каждого параметра тип 

function fruct( int $a ,  int $b , int $c)  { // то в php-7 получим наименьшее число, но без названия фрукта так переменные преобразовалось в число. 

 А в php-8 получим фатальную ошибку. Fatal error: Uncaught TypeError: fruct(): Argument #1 ($a) must be of type int, string given, called in 

Рекурсивная функция 

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

function rec($ap) {   // создаем функцию для рекурсии с аргументом яблок 
if ($ap <= 9){     // условие проверяем если яблок меньше 9 
echo ($ap++) . ' докупить яблок <p>';  // если меньше 9 то постфиксный инкремент, докупить яблок.
rec($ap);  // вызываем функцию внутри себя. если $ap не 9 то возвращаемся на +1 докупить яблок, 
} else return;  //   если не 9, выводим результата. При разных названиях переменных и параметров, будет бесконечное увеличение.
} 
rec($ap); // передаем функции аргумент с данными яблок.  

Поменяйте количество яблок в переменной $ap на 8 и 7, и посмотрите результат.

Так же можно вставлять встроенные и использовать свои функции в функциях. 

Статическая переменная в функции. 

Статическая переменная объявляются при помощи ключевого слова static. От обычных переменных она отличается сохранением данных которые не удаляются после выполнения функции. Чем то похоже на рекурсивную функцию, но которая увеличивается при вызове вне функции. Пример.

$ap = 5; // объявляем переменную.
 
function rec($ap) { // создаем функцию с аргументом яблок
static $ap; // создаем статическую переменную у которой данные только внутри функции.
$ap++; // увеличиваем ее на +1.
return $ap; // возвращаем результат.
}
$rezult = rec($ap); // передадим в переменную данные из функции для вар дамп, при этом при передаче данных мы вызывали функцию в которой статичная переменная увеличивается на +1 
var_dump($rezult); // проверяем данные из функции занесенные в переменную и получаем 1. Так как при записи в переменную мы уже один раз вызвали функцию. 
echo rec($ap) . ' яблока <p>'; // выводим функцию с статической переменной которая в этот раз уже равна 2, так как в статической перменной уже записан результат 1 с прошлого вызова.
rec($ap); // вызываем функцию и получаем +1 к прошлому результату, то есть 3
 
echo rec($ap) . ' яблока'; // выводим функцию и получаем 4 по уже известной причине. 

Результат работы функции статической переменной 
 int(1) 2 яблока 4 яблока. 

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

Домашнее задание 

Запишите условии в Примере: Меньше всего фруктов. Чтобы с меньше всего, после цифры выводилось и название фруктов и не было ошибки в php-7 и в  php-8. 

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

Продолжить просмотр за:
100 Лит
20:55
130
Lit
RSS
Нет комментариев. Ваш будет первым!

Похожий контент

В PHP подключаем файлы операторами include и require.  В этом уроке мы научимс...