Функции
Функция используется для выделения блока кода, используемый много раз в коде. Представьте, что у вас в коде три строки или одна строка встречается несколько раз подряд и выполняет одно и тоже, скажем преобразует строку к целому числу. Потом вам потребовалось изменить целое число на число с плавающей точкой. Вам придется переписать весь код, где используется целое число. При использование функции, этого делать не придется. Достаточно изменить целое число на число с плавающей точкой и оно будет использоваться автоматически при вызове функции.
Чтобы создать функцию ее нужно объявить:
<?php
function longdate($timestamp)
{
return date("l F jS Y", $timestamp);
}
?> |
Эта функция использует в качестве входных данных отметку времени системы UNIX (целое число, отображающее дату и время на основе количества секунд, прошедших с нуля часов 1 января 1970 года), а затем вызывает PHP-функцию date с нужным форматом строки, чтобы вернуть дату в формате «Вторник май 2 2017». Между стоящими после имени функции круглыми скобками может размещаться любое количество параметров, но для этой функции выбран прием только одного параметра. Весь код, который выполняется при последующем вызове функции, заключается в фигурные скобки.
Чтобы вызвать функцию достаточно ее поместить в своем коде:
Функции могут иметь несколько параметров и возвращать несколько результатов. Об этом поговорим чуть позже.
Область видимости переменной
Программируя на PHP можно определить область видимости переменной. Можно указать, что переменная $temp будет использоваться только внутри функции (не видна после выхода из функции) или указать как глобальную переменную, которую можно увидеть в любом месте программы.
Локальные переменные
Локальные переменные создаются внутри функций, доступ к ним есть только у функции. К локальным переменным относятся параметры функции, т.к. к ним доступ есть только в пределах функции и из вне получить доступ ним нельзя. Так же у локальным переменным относятся переменные определенные внутри функции.
Рассмотрим пример на предыдущей функции:
<?php
function longdate($timestamp)
{
$temp = date("l F jS Y", $timestamp);
return "Дата: $temp";
}
?> |
В данном пример, переменной $temp присваивается значение текущей даты, которое потом возвращается, и после выхода из функции $temp будет удалена из программы, как будто не существовала.
Если мы захотим вынести переменную на уровень выше (за пределы функции), то у нас возникнет проблема с доступом к ней. В PHP по умолчанию указание переменной ведет к ее созданию на текущем уровне видимости, т.е. будет создана новая переменная с таким же именем, а старая скрыта. Рассмотрим на примере:
<?php
$temp = "Дата: ";
echo longdate(time());
function longdate($timestamp)
{
return $temp . date("l F jS Y", $timestamp);
}
?> |
При запуске программы мы получим предупреждения: Notice: Undefined variable: temp (Не определенная переменная temp). А если все таки выполним, то результат будет дата без текста "Дата: ". Как было сказано ранее переменная $temp в функции была создана заново и ранее определение ($temp = "Дата: ";) было скрыто.
Как же исправить код, чтобы переменная работала? Для это можно использовать несколько способов, вот примеры:
<?php
$temp = "Дата: ";
echo $temp . longdate(time());
function longdate($timestamp)
{
return date("l F jS Y", $timestamp);
}
?> |
Объединили строковые значение в одной области видимости.
<?php
$temp = "Дата: ";
echo longdate($temp, time());
function longdate($text, $timestamp)
{
return $text . date("l F jS Y", $timestamp);
}
?> |
Внесли переменную в область видимости передав ее, как аргумент функции.
Если забыть об области видимости локальной переменной, то можно получить ошибку, которая будет трудно отловить.
Глобальные переменные
Иногда нужно чтобы переменную можно было изменить в любом месте программы, такие переменные называются глобальными.
Чтобы объявить глобальную переменную, необходимо перед переменной указать ключевое слово global.
Статические переменные
Предположим вам нужна локальная переменная, которая должна сохранять свое значение после выхода из функции. Создавать глобальную переменную?
В PHP можно создать такую переменную, которая не будет доступна из других частей программы, кроме функции, и сохранять свои значения от вызова к вызову. Такими переменными и являются статические переменные. Чтобы объявить глобальную переменную, необходимо перед переменной указать ключевое слово static.
<?php
function test()
{
static $count = 0;
echo $count;
$count++;
}
?> |
При объявлении статических переменных запрещается из присваивать значение каких-либо действий.
static $count = 1 + 3; // не допустимо |
Суперглобальные переменные
Начиная с версии PHP 4.1.0, стали доступны некоторые предопределенные переменные. Они известны как суперглобальные переменные. Смысл этого названия заключается в том, что они предоставляются средой окружения PHP и имеют глобальную область видимости внутри программы, то есть доступны абсолютно из любого ее места.
Имя суперглобальной переменной |
Ее содержимое |
$GLOBALS |
Все переменные, которые на данный момент определены в глобальной области видимости сценария. Имена переменных служат ключами массива |
$_SERVER |
Информация о заголовках, путях, местах расположения сценариев. Элементы этого массива создаются веб-сервером, и это не дает гарантии, что каждый веб-сервер будет предоставлять какую-то часть информации или ее всю |
$_GET |
Переменные, которые передаются текущему сценарию методом HTTP GET |
$_POST |
Переменные, которые передаются текущему сценарию методом HTTP POST |
$_FILES |
Элементы, подгруженные к текущему сценарию методом HTTP POST |
$_COOKIE |
Переменные, переданные текущему сценарию посредством HTTP cookies |
$_SESSION |
Переменные сессии, доступные текущему сценарию |
$_REQUEST |
Содержимое информации, переданной от браузера; по умолчанию $_GET, $_POST и $_COOKIE |
$_ENV |
Переменные, переданные текущему сценарию методом environment |
В этих суперглобальных переменных содержится масса полезной информации о текущей работающей программе и ее окружении. Такие переменные имеют структуру ассоциативных массивов. Для примера, посмотрим откуда пришел пользователь на текущую страницу:
$came_from = $_SERVER['HTTP_REFERRER']; |
Проблемы безопасности
Обратите внимание, что суперглобальные переменные часто используются злоумышленниками, пытающимися отыскать средства для атаки и вмешательства в работу вашего сайта. Они загружают в $_POST, $_GET или в другие суперглобальные переменные вредоносный код, например команды UNIX или MySQL, которые, если вы по незнанию к ним обратитесь, могут разрушить или отобразить незащищенные данные.
Перед применением суперглобальных переменных их всегда следует подвергать предварительной обработке, используйте PHP-функцию htmlentities. Таким образом предыдущий пример будет выглядеть так:
$came_from = htmlentities($_SERVER['HTTP_REFERRER']); |
|