[Image] Четверг, 19.12.2024, 03:29 [Image]
SEO, технологии, игры, IT новости
[Image] Главная Регистрация Вход [Image]
[Image] Приветствую Вас, Гость · RSS [Image]
Меню сайта

Форма входа
 Блог
Главная » 2010 » Декабрь » 18 » Функции, определяемые пользователем
15:20
Функции, определяемые пользователем

До сих пор все примеры сценариев, которые мы рассматривали, были линейными (что означает, что они начинались вверху и заканчивались внизу). Однако это бы существенно ограничивало возможности сценариев, если бы их можно было создавать лишь таким вот образом. Чтобы преодолеть это ограничение, вы можете применять функции. Те, у кого есть предшествующий опыт программирования, вероятно, уже знакомы с этой концепцией и нуждаются в минимальных объяснениях. Для тех, чей опыт мал, предназначена следующая информация.
В РНР функции определяются следующим образом: function func_name ([variable [= constant]!, •••]) {/* любой допустимый код РНР */
Имя функции (помеченное здесь как func_name) — это произвольное (но осмысленное) имя, подчиняющееся тем же правилам, что и имена переменных РНР, с последующим набором параметров. Количество параметров, их значения по умолчанию (если таковые есть) и имена задаются разработчиком. Функции также могут "возвращать" значение с помощью оператора return. Ниже представлен пример функции РНР, которая определяет, является ли данный год високосным.

Листинг 1.19. Пользовательская функция для определения високосного года
function is_leapyear($year = 2004) {
$is_leap = (!($year % 4) && (($year % 100) || !($year % 400)));
return $is_leap;
НА ЗАМЕТКУ
Если вы с недоумением смотрите на текст этой функции, то вот объяснение, как она рабо-
тает. Год считается високосным, если:
• Делится на 4, но не на 100.
• Делится на 4 и на 400.
После того, как эта функция определена в вашем сценарии, она может использоваться, как показано в листинге 1.20.
Листинг 1.20. Вызов пользовательской функции
$answer = is_leapyear(2005);
if ($answer) {
echo "2005-й год високосный<ВК>"
} else {
echo "2005-й год не високосный<ЕЖ>"
}
/* Применение значения по умолчанию для параметра */
Sanswer = is_leapy'er ();
if ($answer) {
echo "2004-й год високосный<ВК>"
} else {
echo "2004-й год не високосный<ВК>"
После представления функций пришло время обратить внимание на область видимости переменных. Термин область видимости (scope) переменной указывает на то, как РНР решает, какие из объявленных переменных в каком месте сценария могут быть использованы. До настоящего времени все переменные у нас относились к так называемой глобальной области видимости. Однако переменные, объявленные внутри функции, являются частью того, что называется локальной областью функции, если только не указано другое. Что это значит для вас, как разработчика? Взглянув еще раз на функцию is_leapyear (), можно увидеть, что переменная $is_leap существует только внутри функции и не может быть доступна за пределами ее контекста. Фактически вы даже можете создать переменную по имени $is_leap где-то в другом месте сценария (но не в пределах функции is_leapyear ()) без какого-либо влияния на одноименную переменную внутри функции. Более того, любые переменные, определенные вне функции, также не доступны внутри нее.
Несмотря на то что концепция области видимости чрезвычайно удобна и значительно упрощает разработку, существуют случаи, когда желательно иметь доступ к переменным из внешней по отношению к функции области видимости. Чтобы позволить это, в РНР включен оператор global. Это слово меняет область видимости данной переменной с локальной области видимости на глобальную. Синтаксис global выглядит следующим образом:
global $varl [, $var2 [, $var3 [, . . . ] ] ] ;
В РНР переменная, которая передается оператору global, не должна быть ранее объявлена ни в какой области видимости. В частности, это удобно тогда, когда вы хотите спроектировать функцию, которая "создает" переменную в глобальном контексте, как показано в листинге 1.21.
Листинг 1.21. Работа с областью видимости переменной в РНР
function createglobal() {
global $my_global;
$my_global = 10;
}
echo "Значение \$my_global равно '$my_global'
";
createglobal();
echo "Значение \$my_global равно '$my_global'
";
?>
Результирующий вывод имеет следующий вид:
Значение $my_global равно ' '
Значение $my_global равно '10'

Как видите, несмотря на то, что $my_global нигде не инициализируется в глобальной области, с помощью оператора global она создается внутри функции createglobal (). Аналогичным образом переменные, которые существуют в глобальном контексте, могут также быть перенесены в локальный контекст функции в той же манере (см. листинг 1.22).

Листинг 1.22. Еще об областях видимости переменных РНР
function getglobal() {
global $my_global;
echo "Значение \$foobar равно '$foobar'
";
}
$my_global = 20;
getglobal();
Это выдаст такой результат: Значение $my_global равно ' 2 0 '
НА ЗАМЕТКУ
Несмотря на то что локальные переменные тесно связаны с концепцией области видимости, некоторые переменные, создаваемые РНР, а именно — $_SERVER, $_GET, $_POST, $_REQUEST, $_GLOBALS, $_COOKIE, $_ENV, $_SESSION и $_FILES доступны всегда независимо от текущего контекста (имена чувствительны к регистру).
 Эти переменные, называемые суперглобальными, во время выполнения сценария РНР доступны постоянно. Эти суперглобальные переменные используются и объясняются далее в настоящей книге, а короткое представление можно найти по адресу:http://www.php.net/manual/en/language.variables.predefined.php
В большинстве случаев, когда выполняется функция РНР, любые переменные, которые были созданы функцией, уничтожаются по ее завершении. Однако, как большинство современных языков программирования, РНР поддерживает статические переменные, которые не уничтожаются при завершении функции. Для создания статической переменной в функции применяется оператор s t a t i c , как показано в следующем примере:
s t a t i c $varname [= constant [, $var2 [= c o n s t a n t ] ] . . . ] ;
$varname — это имя переменной, которая не должна уничтожаться по завершении работы функции, а необязательная константа (constant) задает начальное значение этой переменной. В листинге 1.23 приведен пример использования оператора s t a t i c .
Листинг 1.25. Работа со статическими переменными в РНР
function statictestO {
static $count • 0;
$count++;
return $count;
}
statictest() ;
statictest() ;
$foo = statictestO;
echo "Функция statictestO работала $foo pa3a.
";
?>

Результат работы этого сценария: Функция statictestO работала 2 раза


Категория: Все о PHP | Просмотров: 1951 | Добавил: witkom8382 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024
Категории
Оптимизация сайта [592]
Создание сайтов [355]
Заработать в интернете [508]
Технологии [48]
Полезное [392]
Услуги и сервисы [317]
Автоблог [105]
Скрипты для Ucoz [39]
Движок на сайт [10]
Все о Joomla и Drupal [20]
Все о PHP [91]
Поиск
Пользовательский поиск
Статистика


Онлайн всего: 3
Гостей: 3
Пользователей: 0
Seo сайт, технологии продвижения, мета теги, оптимизация сайтов, новости сео, Скрипты, Ucoz

Рейтинг@Mail.ru