функции php

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

Есть код, который мы запустили, он выполнился один раз и все. Но есть блоки кода, которые могут повторяться больше, чем один раз. Если кусок кода используется более 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';



Добавить комментарий

Ваш e-mail не будет опубликован.