Функция — это автономный блок кода, который выполняет определенную задачу.

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

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

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

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

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

В этом разделе мы узнаем, как создать свою собственную функцию в PHP.

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

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

function functionName() {
    // Код для выполнения
}

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

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

<?php
// Определяем функцию
function whatIsToday() {
    echo "Today is " . date('l', mktime());
}
// Вызываем функцию
whatIsToday();
?>

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

Функции с параметрами

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

function myFunc($oneParameter, $anotherParameter) {
    // Код для выполнения
}

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

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

<?php
// Определяем функцию
function getSum($num1, $num2) {
  $sum = $num1 + $num2;
  echo "Сумма двух чисел $num1 и $num2 равна: $sum";
}

// Вызываем функцию
getSum(10, 20); // Выводит: 30
?>

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

Функции с дополнительными параметрами и значениями по умолчанию

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

<?php
// Определяем функцию
function customFont($font, $size=1.5) {
    echo "<p style=\"font-family: $font; font-size: {$size}em;\">Hello, world!</p>";
}

// Вызываем функцию
customFont("Arial", 2);
customFont("Times", 3);
customFont("Courier");
?>

Как видите, третий вызов customFont() не включает второй аргумент. Это заставляет механизм PHP использовать значение по умолчанию для параметра $size, равное 1,5.

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

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

<?php
// Определяем функцию
function getSum($num1, $num2) {
    $total = $num1 + $num2;
    return $total;
}

// Печатаем возвращенное значение
echo getSum(5, 10); // Выводит: 15
?>

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

<?php
// Определяем функцию
function divideNumbers($dividend, $divisor){
    $quotient = $dividend / $divisor;
    $array = array($dividend, $divisor, $quotient);
    return $array;
}

// Назнаем переменные, как если бы они были массивом
list($dividend, $divisor, $quotient) = divideNumbers(10, 2);
echo $dividend;  // Выводит: 10
echo $divisor;   // Выводит: 2
echo $quotient;  // Выводит: 5
?>

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

В PHP есть два способа передать аргументы функции: по значению (value) и по ссылке (reference). По умолчанию аргументы функции передаются по значению, поэтому, если значение аргумента внутри функции изменяется, оно не затрагивается за пределами функции. Однако, чтобы функция могла изменять свои аргументы, они должны передаваться по ссылке.

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

<?php
/* Определяем функцию умножения числа
само по себя и возвращаем новое значение */
function selfMultiply(&$number){
    $number *= $number;
    return $number;
}

$mynum = 5;
echo $mynum; // Выводит: 5

selfMultiply($mynum);
echo $mynum; // Выводит: 25
?>

Понимание области переменной

Вы можете объявить переменные где угодно в PHP-скрипте. Но расположение объявления определяет степень видимости переменной в PHP-программе, т.е. где переменная может быть использована или доступна. Эта доступность известна как область видимости переменных (variable scope).

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

<?php
// Определяем функцию
function test() {
    $greet = "Hello World!";
    echo $greet;
}

test(); // Выводит: Hello World!

echo $greet; // Выводит ошибку undefined variable error
?>

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

<?php
$greet = "Hello World!";

// Определяем функцию
function test() {
    echo $greet;
}

test();  // Выводит ошибку undefined variable error

echo $greet; // Выводит: Hello World!
?>

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

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

Ключевое слово global

Может возникнуть ситуация, когда вам нужно импортировать переменную из основной программы в функцию или наоборот. В таких случаях вы можете использовать ключевое слово global перед переменными внутри функции. Это ключевое слово превращает переменную в глобальную, делая ее видимой или доступной как внутри, так и вне функции, как показано в примере ниже:

<?php
$greet = "Hello World!";
 
// Определяем функцию
function test() {
    global $greet;
    echo $greet;
}
 
test(); // Выводит: Hello World!
echo $greet; // Выводит: Hello World!
 
// Присваиваем новое значение переменной
$greet = "Goodbye";
 
test(); // Выводит: Goodbye
echo $greet; // Выводит: Goodbye
?>

Вы узнаете больше о видимости и управлении доступом в Руководстве по классам и объектам в PHP.

Создание рекурсивных функций

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

В следующем примере показано, как работает рекурсивная функция.

<?php
// Определяем рекурсивную функцию
function printValues($arr) {
    global $count;
    global $items;
    
    // Проверяем существование массива
    if(!is_array($arr)){
        die("ERROR: Input is not an array");
    }
    
    /*
    Перебираем массив, если значение само по себе является массивом, рекурсивно вызываем эту же функцию;
    функция else добавляет найденное значение в новый массив элементов $items,
    и увеличивать счетчик на 1 для каждого найденного значения
    */
    foreach($arr as $a){
        if(is_array($a)){
            printValues($a);
        } else{
            $items[] = $a;
            $count++;
        }
    }
    
    // Возвращаем общее количество и значения, найденные в массиве
    return array('total' => $count, 'values' => $items);
}
 
// Определяем вложенный массив
$species = array(
    "birds" => array(
        "Eagle",
        "Parrot",
        "Swan"
    ),
    "mammals" => array(
        "Human",
        "cat" => array(
            "Lion",
            "Tiger",
            "Jaguar"
        ),
        "Elephant",
        "Monkey"
    ),
    "reptiles" => array(
        "snake" => array(
            "Cobra" => array(
                "King Cobra",
                "Egyptian cobra"
            ),
            "Viper",
            "Anaconda"
        ),
        "Crocodile",
        "Dinosaur" => array(
            "T-rex",
            "Alamosaurus"
        )
    )
);
 
// Считаем и печатаем значения во вложенном массиве
$result = printValues($species);
echo $result['total'] . ' value(s) found: ';
echo implode(', ', $result['values']);
?>

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

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.