Пишем свою функцию php

Функции PHP

В мире программирования и сценариев существует два способа писать код. Первый из них — это написать длинные и монолитные разделы сценария. Другой — разбить код на аккуратные, автономные блоки, которые можно использовать повторно, не изобретая один и тот же код снова и снова. Очевидно, что второй метод предпочтительнее первого, а фундаментальным строительным блоком этого подхода к написанию сценариев PHP является функция.

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

Функции в PHP существуют в двух формах:

  • Встроенные функции : функции, которые предоставляются вместе с PHP, чтобы облегчить вам жизнь веб-разработчика, например, print_r(), var_dump, gettype() fopen() и др.
  • Пользовательские функции : помимо встроенных функций, мы можем создавать наши собственные пакеты кода и использовать их везде, где это необходимо, просто их вызывая.

Создание пользовательской функции PHP

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

Функции PHP создаются с использованием ключевого слова function , за которым следует имя и, наконец, набор круглых скобок () . Затем тело функции (сценарий, выполняющий работу функции), которое заключено в фигурные скобки <> .

Примечание: Имена функций не чувствительны к регистру букв.

В приведенном ниже примере мы создаем функцию с именем report . Открывающая фигурная скобка (<) указывает начало кода функции, а закрывающая фигурная скобка (>) указывает конец функции. Функция выводит строку «Это моя первая функция» . Чтобы вызвать функцию, просто напишите ее имя и вставьте за ним скобки ():

Пример

 function report() echo "Это моя первая функция"; 
>

report(); // вызов функции
?>

Результат выполнения кода:

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

Параметры (или аргументы, как их чаще называют) могут быть переданы в функцию. Аргументы указываются после имени функции в круглых скобках () . Вы можете добавить сколько угодно аргументов, просто разделив их запятыми. К именам параметров применяются те же правила, которые применяются к именам переменных в целом.

В следующем примере есть функция с двумя аргументами ($car, $color). Когда вызывается функция my_car(), мы также передаем значения аргументов (например, Mazda), и это значения используется внутри функции:

Читайте также:  Css dasturlash tili skachat

Пример

 function my_car($car, $color) < // Указано два аргумента: $car и $color
echo "Марка машины: $car и она имеет $color цвет";
>

$color = 'белый';

// Вызываем функцию и передаем ей два аргумента
my_car('Mazda', $color); // Аргументы - строковой литерал и переменная
?>

Результат выполнения кода:

В следующем примере вызываем функцию с двумя аргументами ($fname и $year) передавая разные значения:

Пример

 function firstName($fname, $year) echo "$fname Иванова. Родилась в $year 
";
>

firstName("Надя", "1975");
firstName("Галя", "1978");
firstName("Света", "1983");
?>

Результат выполнения кода:

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

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

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

Пример

 function getMultiply(&$num) $num *= $num; 
return $num;
>

$mynum = 5;
echo $mynum; // Результат: 5

getMultiply($mynum);
echo $mynum; // Результат: 25
?>

Результат выполнения кода:

Значения по умолчанию для параметров функции

Функции могут определять значения аргументов по умолчанию. Чтобы установить значение по умолчанию просто вставьте имя параметра, затем знак равенства (=) и значение по умолчанию:

Пример

 function getYear($str, $num=15) echo "$str возраст $num лет \n"; 
>

echo getYear("Катя", 14); // Катя возраст 14 лет

echo getYear("Вася"); // Вася возраст 15 лет
?>

Результат выполнения кода:

В приведенном выше примере параметр $num имеет значение по умолчанию 15. Во втором вызове функции мы не передаем какое-либо значение для этого параметра, поэтому принимается значение по умолчанию 15. А вот параметр $str не имеет значения по умолчанию, поэтому он обязателен при вызове функции.

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

function my_car($car = 'Mazda', $color) - ERROR

Возврат значения из функции PHP

Функции могут возвращать значения в ту часть PHP сценария, из которой они были вызваны. Для возврата значения используется ключевое слово return . Возвращаемое значение может быть любого типа, включая массивы и объекты.

Оператор return может распологаться в любом месте функции. Когда интерпретатор доходит к оператору return , функция возвращает значение (если указано) и завершает свое выполнение. Если оператор return не указан или не указано возвращаемое значение, то функция вернет значение NULL .

В следующем примере возвращаемое функцией значение присваивается переменной:

Пример

 //функция вместе с тремя параметрами 
function getSum($num1, $num2, $num3) $product = $num1 + $num2 + $num3;

return $product; //возврат переменной
>

// сохраняем возвращенное значение
$retValue = getSum(2, 3, 5);
echo "Сумма: $retValue";
?>

Результат выполнения кода:

Читайте также:  Php знак больше или равно

Функция не может возвращать несколько значений. Но мы можем получить несколько результатов, возвращая массив, как показано в следующем примере:

Пример

 function divideNum($dividend, $divisor) $quotient = $dividend / $divisor; 
$array = array($dividend, $divisor, $quotient);
return $array;
>

// Инициализация переменных значениями из массива
list($dividend, $divisor, $quotient) = divideNum(15, 3);
echo $dividend; // Результат: 15
echo $divisor; // Результат: 3
echo $quotient; // Результат: 5
?>

Результат выполнения кода:

Строгая типизация

Обратите внимание, что в приведенном выше примере мы не указывали PHP-интерпретатору, к какому типу данных принадлежит переменная.

PHP — это слабо типизированный язык и он автоматически связывает тип данных с переменной в зависимости от ее значения. Благодаря этой особенности, мы можем добавлять строки к целому числу, не вызывая ошибки.

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

В следующем примере функция получает параметры как число, так и строку, не используя strict :

Пример

 function getSum(int $a, int $b) return $a + $b; 
>
echo getSum(7, "7 days");
// поскольку strict НЕ включен, "7 дней" заменяется на int (7), и возвращается 14 ?>

Результат выполнения кода:

Для влючения режима строгой типизации используется выражение declare в объявлении strict_types , которое прописывается в верхней строке файла PHP:

Пример

 function getSum(int $a, int $b) return $a + $b; 
>
echo getSum(7, "7 days");
// поскольку strict включен и "7 дней" не является целым числом, будет выдана ошибка
?>

Результат выполнения кода будет примерно такой:

PHP Fatal error: Uncaught TypeError: Argument 2 passed to addNumbers() must be of the type integer, string given, called in /home/bWN0Ml/prog.php on line 6 and defined in /home/bWN0Ml/prog.php:3 Stack trace: #0 /home/bWN0Ml/prog.php(6): addNumbers(7, ‘7 days’) #1 thrown in /home/bWN0Ml/prog.php on line 3

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

Объявления типа возвращаемого значения

PHP 7 поддерживает объявление типа возвращаемого значения функции (return) . Как и в случае с объявлением типа для аргументов функции, включение режима строгой типизации при несоответствии типа возвращаемого значения функции вызовет ошибку.

Чтобы объявить режима строгой типизации для возвращаемого значения функции, добавьте двоеточие (:) и тип прямо перед открывающей фигурной скобкой < при объявлении функции.

Пример

 function getSum(float $a, float $b) : float return $a + $b; 
>
echo getSum(1.5, 2.3);
// вернёт 3.8 ?>

Результат выполнения кода:

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

Пример

 function getSum(float $a, float $b) : int return (int)($a + $b); 
>
echo getSum(1.5, 2.3);
// вернёт 3 ?>

Результат выполнения кода:

Читайте также:  Python добавить перевод строки

Источник

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

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

Создание функций

Создание функции выглядит следующим образом:

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

Функция выполняется только при её вызове. Если убрать из примера выше строку message(); , то функция не запустится.

Аргументы функций

Функция может принимать значения от пользователя:

В примере выше мы передаём функции 2 значения. Функция помещает их в переменные $v1 и $v2 , после чего мы можем работать с ними.

Получение значения из функции

Получить результат работы функции можно с помощью оператора return :

Отлично, теперь функция только выполняет расчёты и возвращает результат, а мы уже сами решаем, что с ним делать дальше.

Старайтесь не выводить никакую информацию на экран внутри функций.

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

Значения по-умолчанию

Вы можете указать значение по-умолчанию для переменной:

 echo sum(5, 15); // выведет 20 echo sum(5); // выведет 7 ?>

В примере выше мы указываем, что если 2-ой параметр не передан, то переменная получит значение 2 .

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

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

 echo make(1, 'текст'); // ошибка, вторым параметром должен быть массив ?>

Если мы передадим в функцию значение, которое можно привести к требуемому типу (например, вместо строки передадим число), значение будет приведено к нужному типу. Если значение привести нельзя (например, массив нельзя превратить в строку), произойдёт ошибка:

 make(1); // Ошибки не будет, число превратится в строку make([1,2]); // Ошибка, массив нельзя превратить в строку ?>

Тип возвращаемого значения

Ещё одна фишка PHP 7 — возможность указать, какой тип данных должна возвращать функция. Если возможно, возвращаемое значение будет приведено к нужному типу, иначе мы получим ошибку:

Область видимости функций

Функции в PHP имеют локальную область видимости. Это означает, что внутри функции видны только те переменные, которые были объявлены внутри функции, либо переданы в неё:

 $a = 5; show(); // Ошибка, $a внутри функции не существует
 $a = 5; edit($a); // Выведет 5, потому что $a внутри и вне функции - это разные переменные echo $a;

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

Глобальные переменные можно использовать внутри функций с помощью ключевого слова global :

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

По возможности никогда не используйте глобальные переменные.

Константы в функциях

В отличие от переменных, константы видны в любой области видимости:

Источник

Оцените статью