PHP занятие 5. Функции языка

На уроке будут рассмотрены функции языка php: встроенные функции и php пользовательские функции

Встроенные php функции

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

Все функции языка PHP подразделяются на:

  • встроенные
  • пользовательские

Встроенные функции — это предусмотренные синтаксисом языка конструкции, выполняющие конкретные действия. Примером могут служить рассмотренные ранее функции echo() и print().

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

Что необходимо знать про любые функции:

  • после названия функции всегда ставятся круглые скобки (могут быть пустые или с аргументами функции внутри, перечисленными через запятые);
  • функция может принимать информацию из программы через список аргументов, разделенных запятыми (аргументы читаются слева направо);
  • если в функцию передаются аргументы не того типа, на который она «рассчитывает» (например string вместо array), то будет выдаваться либо NULL либо ошибка;
  • для вызова функции достаточно написать ее имя и список фактических аргументов в круглых скобках.
встроенные функции php
Рис. 5.1. Пример использования встроенных функций php

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

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

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

Решение:

1
2
3
4
5
6
7
8
9
10
11
12
// описание функции
function sayHello(){
	echo "Привет!<br/>";
}
 
// вызов функции
sayHello();
 
// проверка существования функции
if (function_exists("sayHello")) {
	echo "есть";
	}

Результат:

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

Рассмотрим пример:

Пример: создать первую функцию, внутри которой описать вторую функцию

Выполнение:

1
2
3
4
5
6
7
8
function function1() {
  echo "<p>Первая функция</p>";
    function function2() {
     echo "<p>Вторая функция</p>";
    }
}
function1();
function2();

Результат:

Первая функция
Вторая функция

Пример иллюстрирует, что средства php не позволяют создавать локальных функций, т.е. которые будут «видны» только в определенных местах кода программы. В нашем случае function2() должна быть локальной, т.е. область ее видимости — только функция function1(). Вызывая локальную функцию из общей программы, должна выдаваться ошибка. Но в php данный механизм отсутствует, и ошибки нет. Таким образом обе функции в примере глобальные.

Создание функции php с аргументами

Рассмотрим синтаксис функции с аргументами на примере

Пример: создать функцию, которая выводит на экран приветствие с именем, передаваемым в качестве аргумента (например, Привет, Вася!)

Решение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// описание функции
function sayHello($name){
	echo "Привет, $name!<br/>";
}
 
// вызов функции вариант 1
sayHello("Вася");
 
// вызов функции вариант 2
$name="Вася";
sayHello($name);
 
// вызов функции вариант 3
$myFunc="sayHello"; // здесь круглые скобки не нужны!
$myFunc("Вася");

Все три способа вызова функции равнозначны.

Задание php 5_1: Написать функцию с двумя аргументами, возвращающую результат возведения числа в степень.

Примечание: степень в php вычисляется при помощи функции pow()
pow ($a, $b); где $a — число, $b — степень

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

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

Локальные и глобальные переменные в php
Рис. 5.2. Локальные и глобальные переменные в php

Но если необходимо сделать так, чтобы функция имела возможность изменять значения аргумента и на уровне программы (глобально), то необходимо передавать аргумент по ссылке. Это делается при помощи символа амперсанд &
Передача аргумента по ссылке
Рис. 5.3. Передача аргумента по ссылке

Пример: передавать в функцию строковый аргумент по ссылке (&str='Просто строка'). Изменить в функции значение аргумента (прибавить к ней значение ‘и кое-что еще.’)

Решение:

1
2
3
4
5
6
7
function add_str(&$str2)
{
    $str2 .= 'и кое-что еще.';
}
$str1 = 'Просто строка, ';
add_str($str1);
echo $str1; // выведет 'Просто строка, и кое-что еще.'

Лабораторная работа 1:
Задание 1

  1. Опишите функцию getTable()
  2. Задайте для функции три аргумента: cols, rows, color

Задание 2

  1. Скопируйте код, отрисовывающий таблицу умножения из лабораторной работы предыдущего урока
  2. Вставьте скопированный код в тело функции getTable()
  3. Измените код таким образом, чтобы таблица отрисовывалась в зависимости от входящих параметров cols, rows и color

Задание 3

  • Отрисуйте таблицу умножения вызывая функцию getTable() с различными параметрами
  • Аргументы по умолчанию

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

    Значение по умолчанию в php
    Рис. 5.4. Значение по умолчанию

    Пример: создать функцию с аргументом для вывода приветствия. Установить значение по умолчанию для аргумента равное «Гость»

    Решение:

    1
    2
    3
    4
    5
    6
    7
    
    function sayHello($p,$name = "Гость"){
    	echo "$p, $name!<br/>";
    }
     
    sayHello("Привет","Вася"); // Привет, Вася!
    sayHello("Здравствуйте"); // Здравствуйте, Гость!
    sayHello("Привет",null); // Привет, !
    Важно: аргументы, для которых определены значения по умолчанию, должны находиться правее аргументов, для которых значения по умолчанию не установлены
    Задание php 5_2: откройте выполненную лабораторную работу этого урока. Продолжите выполнение задания:
    Задание 4

    1. Откройте предыдущее задание с отрисовкой таблицы в функции. Измените входящие параметры функции gettable() на параметры по умолчанию

    Задание 5

  • Отрисуйте таблицу умножения вызывая функцию getTable() без параметров
  • Отрисуйте таблицу умножения вызывая функцию getTable() с одним параметром
  • Отрисуйте таблицу умножения вызывая функцию getTable() с двумя параметрами
  • Возвращение значений функцией, Return

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

    Внутри такой функции используется оператор возврата return (с англ. «вернуть»), после которого указывается возвращаемое значение (или переменная, массив, выражение и т.п.)

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

    Пример: описать функцию с двумя аргументами, возвращающую сумму данных аргументов

    Решение:

    1
    2
    3
    4
    5
    6
    7
    8
    
    function sum($a, $b) {
        return $a + $b;
    }
    // 1 вариант вызова
    echo sum(1, 2) ;
    // 2 вариант вызова
    $x=sum(1, 2);
    echo $x;
    Задание php 5_3: описать функцию с одним аргументом, возвращающую степень двойки. Степень передавать в качестве аргумента. Установить значение по умолчанию (=2) для аргумента
    Лабораторная работа 2:

    Задание 1

    1. Опишите функцию getMenu()
    2. Задайте для функции первый аргумент menu, в него будет передаваться массив, содержащий структуру меню
    3. Задайте для функции второй аргумент vertical со значением по умолчанию равным TRUE (логический тип данных — true-истина, false-ложь).

    Данный параметр указывает, каким образом будет отрисовано меню — вертикально или горизонтально

    Задание 2

    1. Откройте файл c лабораторной работой с отрисовкой меню
    2. Скопируйте код, который создает массив menu и вставьте скопированный код в данный документ
    3. Скопируйте код, который отрисовывает меню
    4. Вставьте скопированный код в тело функции getMenu()
    5. Измените код таким образом, чтобы меню отрисовывалась в зависимости от входящих параметров menu и vertical

    Задание 3

    1. Отрисуйте вертикальное меню вызывая функцию getMenu() с одним параметром
    2. Отрисуйте горизонтальное меню вызывая функцию getMenu() со вторым параметром равным FALSE
    3. Сохраните код в отдельном файле