Содержание
Есть код, который мы запустили, он выполнился один раз и все. Но есть блоки кода, которые могут повторяться больше, чем один раз. Если кусок кода используется более 1 раза, под него надо писать функцию. Т.е. функция — это программный блок, который может многократно выполняться в любом месте, где его попросят. Имена функций регистронезависимы. Правила именования — как у переменных.
Описание функции:
function sayHello (){ // именуем функцию echo 'Hello'; // тело функции }
Вызов функции:
sayHello(); // пишем имя функции
Задавать функцию даже из одной строки стоит. Если нужно будет изменить функцию, не надо лезть в код и править в нескольких местах, достаточно исправить тело функции (обычно все функции рекомендуют описывать в отдельном файле, чтобы не лезть в код, а затем этот файл подключают).
В php нет понятия перегрузки функций. Т.е. одну функцию нельзя объявить два раза, выскочит ошибка (‘Fatal error: Cannot redeclare sayHello ()’). Внутри php несколько тысяч встроенных функций, нельзя, чтобы имена совпадали с нашими функциями. Поэтому для проверки существования функции используйте код:
if(function_exists('sayHello')){} // вернет true, если такая функция уже есть
Аргументы функции
В круглые скобки у функции можем передать аргументы (параметры через запятую), которые затем будем использовать внутри этой функции.
function sayHello($name, $h){ echo "Hello, $name!";} sayHello("Иван",1); // Hello, Иван! заголовок 1 sayHello("Петр",2); // Hello, Петр! заголовок 2
Иногда при работе с массивом вместо квадратных скобок [ ] пишут круглые ( ). Выскочит ошибка: ‘Fatal error: Function name must be a string’. Кодер в шоке, какая функция, если я работаю с массивом? А php при виде круглых скобок сразу думает, что это вызов функции.
Области видимости
Различают две области видимости: глобальная и локальная. Глобальная области видимости — это все, что не внутри функции. Локальная — это внутри тела функции. Когда php идет по коду, он не видит, что внутри функций. Когда вызываем функцию, php заходит внутри нее и ‘закрывает за собой дверь’, т.е. он уже не видит, что снаружи.
function sayHello($name){ echo "hello $name"; global $name; // если объявим переменную глобальной, в последней строке будет Max $name = 'Max'; // глобальная видимость } sayHello('Oleg'); $name = 'Mike'; // другая переменная, из другой области видимости sayHello($name); // здесь лежит Oleg echo $name; // Mike - локальная видимость echo $name; // Max
У оператора global есть недостатки: 1) объявив переменную глобальной (см. код выше), мы лишаемся локальной $name (строки №7), она удалится; 2) функции могут быть длинными, поэтому нужно проверять/искать внутри глобальную переменную.
Когда в коде мы создаем переменную со значением: $a=1, то php у себя в глобальном массиве создает так:
$GLOBALS['a']=1;
Можно писать и так, но неудобно. Т.е. все наши глобальные переменные лежат внутри массива $GLOBALS[]. Поэтому вместо строк №3-4 (см. код выше) можно написать:
$GLOBALS[$name] = 'Max';