Пользовательские функции в PHP. Выражение return

Пользовательские функции
Выражение return



Пользовательские функции

Пример перадачи значения по ссылке

return в функциях



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



Пользовательские функции




Создадим в папке с уроком новый файл funcs.php и вынесем в него нашу функцию.

Подключаем в файле index.php с помощью require_once файл funcs.php

Если мы хотим использовать фукцию в другом файле, нам достачно подключить файл funcs.php и вызывать функцию sum($a, $b). Причем в файле funcs.php, еще его называют библиотекой функций, может быть объявленно сколь угодно много различных функций.


Если функция вызвана без параметров, то это вызовет ошибку. Что-бы обезопасить наш код от оплошности пользователя - надо для функции установить параметры по умолчанию. Например: $a = 1, $b = 2 , при этом ошибка пропадет:


-- файл funcs.php --

<?php
function sum ($a = 1, $b = 2){ // объявление функции
echo $a + $b;
echo '<br>';
}



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

Если переменная объявлена вне функции, на результаты вызовов функции sum это не повлияет.


Подключение файла funcs.php и вызов функции в индексном файле:


-- файл index.php --

<?php
// Подключаем файл funcs.php
require_once 'funcs.php';

// вызов функции, в качесте параметров передаем два числа
sum (5, 7);

// повторный вызов функции
sum (10, 5);
sum (5, 10);

// переменная вне функции - на результаты вызовов функции sum не повлияет
$a = 200;

// объявление переменных
$x = 100;
$y = 10;

// вызов функции, где в качестве параметров - объявленные переменные
sum ($x, $y);

// вызов функции без параметров - вызовет ошибку (если параметры не установленны по умолчанию)
sum ();

// вызов функции с одним параметром - второй параметр будет - по умолчанию
sum (100);

echo $a;
?>
выведет:
12
15
15

// вызов функции, где в качестве параметров - объявленные переменные
110

// при вызове функции без параметров (параметры по умолчанию: $a = 1, $b = 2 )
3

// при вызове функции с одним параметром (100 + 2 = 102 - второй параметр: $b = 2)
102

// переменная вне функции, выведена с помощью echo
200



- где function - ключевое слово,

- sum - имя нашей фунции.

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

- $a и $b - параметры функции (локальные переменные, которые используются внутри функции),

- $x и $y - переменные, а $a и $b - параметры


Имя функции не должно пересекаться с именем уже имеющихся функций. То есть, два раза объявить одну и ту же функцию нельзя.

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


Если же переменная объявлена внутри функции, то результаты вычислений поменяются, а переменная $a, объявленная вне функции, останется без изменения:


-- файл funcs.php --

<?php
function sum ($a = 1, $b = 2){
$a = 300; // переменная объявляется внутри функции
echo $a + $b;
echo '<br>';
}




файл index.php:


-- файл index.php --

<?php
// подключаем файл funcs.php
// переменная $a = 300 объявленна внутри функции
require_once 'funcs.php';

// вызов функции, в качесте параметров передаем два числа (300+7=307)
sum (5, 7);

// повторный вызов функции (300+5=305)
sum (10, 5);

// (300+10=310)
sum (5, 10);

// переменная вне функции - на результаты вызовов функции sum - не повлияет
$a = 200;

// объявление переменных
$x = 100; $y = 10;

// вызов функции, где в качестве параметров - объявленны переменные (300+10=310)
sum ($x, $y);

// вызов функции без параметров - вызовет ошибку
// (если параметры не установленны по умолчанию, по умолчанию у нас 300+2=302)
sum ();

// вызов функции с одним параметром - второй параметр будет - по умолчанию (300+2=302)
sum (100);

echo $a;
?>



После вызова функции:

выведет:
307
305
310
310
302
302
200 // переменная вне функции, выведена с помощью echo




Пример перадачи значения по ссылке




В файле funcs.php объявим функцию sum_1, где переменная $a - переменная, которая передается по ссылке ( & ):


--файл funcs.php --

<?php

...
...
...

// объявление функции sum_1 (где: & - ссылка)
function sum_1 ( & $a, $b ){
echo $a + $b;
echo '<br>';
$a = 100;
}




Вызываем функцию sum_1 в файле index.php:


--файл index.php --

<?php
// поключаем файл funcs.php
require_once 'funcs.php';

$a = 5;
$b = 10;

echo $a; // переменная $a до вызова функции
echo '<br>';

sum_1( & $a, $b); // вызов функции sum_1( & $a, $b)
echo $a; // переменная $a после вызова функции, выведена с помощью echo
?>
выведет:
5 // переменная $a до вызова функции
15 // результат работы функции sum_1(& $a, $b)
100 // переменная $a после вызова функции, выведена с помощью echo



- если мы передадим переменную $a по ссылке & , то увидим результат - переменная $a изменилась

и приняла значение $a = 100, то есть функция теперь ее меняет. Она теперь равна не 5, а 100 - тому значению, которое было поставленно в функции, поскольку переменную $a мы передаем по ссылке.



return в функциях




Слово return переводится как "вернуть".

В файле funcs.php объявим функцию sum_2:


--файл funcs.php --

<?php

...
...
...

// функция sum_2
function sum_2($a, $b){ // объявление функции sum_2
$c = $a + $b;
return $c;
// return $a + $b; - сразу возвращаем результат
}



Вызываем функцию sum_2, и передадим ей два параметра: 1 и 2


--файл index.php --

<?php
// поключаем файл funcs.php
require_once 'funcs.php';

sum_2(1, 2); // результат ее работы на экран не выводится
echo sum_2 (1, 2);// выведет 3
echo '<br>';

echo 5 + sum_2 (1, 2);// выведет 8
echo '<br>';

$res = sum_2 (1, 2);
echo $res ; // выведет 3
?>
Выведет с помощью echo:
3
8
3




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

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

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

return $a + $b;


Так же функция может возвращать что угодно, например: булево - true, false; и т. д.


Пример.

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

Работа функции array_keys:


--файл index.php --

<?php
// поключаем файл funcs.php
require_once 'funcs.php';

$nums = [1, 2, 3];
$keys = array_keys ($nums );
print_r ($keys);
// выведет: Array ( [0] => 0 [1] => 1 [2] => 2 )
?>



В файле funcs.php объявим функцию my_array-keys($arr), в качестве параметра она принимает массив $arr:


--файл funcs.php --

<?php

...
...
...

// функция my_array_keys
function my_array_keys ($arr){
$data = []; // объявляем пустой массив
foreach ($arr as $k => $v) {
$data[] = $k; // заполняем массив $data ключами $k
}
return $data; // возвращаем массив $data
}




вызываем поочередно нашу функцию my_array_keys, с параметрами $nums, $names, $names2 и test :


--файл index.php --

<?php
// поключаем файл funcs.php
require_once 'funcs.php';

$nums = [1, 2, 3];
$names = [ 'ivanon' , 'Petrov' ];
$names2 = ['Ivan' => 'Ivanov' , 'Petr' => 'Petrov' ];
$test =[];

echo '<br>';

$keys = my_array_keys ($nums );
print_r($keys);
// Результат аналогичен работе функции array_keys.
// выведет: Array ( [0] => 0 [1] => 1 [2] => 2 )
echo '<br>';

$keys2 = my_array_keys ($names);
print_r($keys2);
// выведет: Array ( [0] => 0 [1] => 1 )
echo '<br>';

$keys3 = my_array_keys ($names2);
print_r($keys3);
// выведет: Array ( [0] => Ivan [1] => Petr
echo '<br>';

$keys4 = my_array_keys ($test);
print_r($keys4);
// выведет: Array ( )
echo '<br>';

?>
выведет:
Array ( [0] => 0 [1] => 1 [2] => 2 ) // $keys
Array ( [0] => 0 [1] => 1 ) // $keys2
Array ( [0] => Ivan [1] => Petr ) // $keys3
Array ( ) // $test



Структура файлов урока


php13.png






Наверх Наверх