Cтатические переменные PDF Печать E-mail

Помимо локальных и глобальных переменных, в PHP существует еще один тип переменных - статические переменные.

Если в теле пользовательской функции объявлена статическая переменная, то компилятор не будет ее удалять после завершения работы функции. Пример работы пользовательской функции, содержащей статические переменные:

<?php
function funct()
{
static $a;
$a++;
echo "$a";
}
for ($i = 0; $i++<10;) funct();
?>

Данный сценарий выводит строку:

1 2 3 4 5 6 7 8 9 10

Если мы удалим инструкцию static, будет выведена строка:

1 1 1 1 1 1 1 1 1 1

Это связано с тем, что переменная $a будет удаляться при завершении работы функции и обнуляться при каждом ее вызове. Переменная $a инкрементируется сразу после обнуления, а только потом выводится.

Рекурсивные функции

Рекурсивные функции - это функции, вызывающие самих себя. Такой вызов называется рекурсивным. Рекурсия бывает:

  • прямая;
  • непрямая

Рассмотрим пример рекурсивной функции (прямой), используемой при вычислении факториала x! :

<?php
function factorial($x) {
if ($x === 0) return 1;
else return $x*factorial($x-1);
}
echo factorial(7);
?>

В рассмотренном примере пользовательская функция factorial() вызывает сама себя, что является прямой рекурсией.

Непрямая рекурсия возникает, когда первая функция вызывает вторую, а вторая - первую.

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

Вот пример неправильного использования рекурсивной функции:

<?php
function factorial($x) {
if ($x === 0) return 1;
else return $x*factorial($x);
}
?>

Условно определяемые функции

PHP позволяет, в зависимости от определенных факторов, одной и той же функции выполнять различные действия. Рассмотрим пример:

<?php
$phpver = phpversion();
if ($phpver[0] === "5")
{
function getversion() { return "Вы используете PHP5"; }
}
if ($phpver[0] === "4")
{
function getversion() { return "Вы используете PHP4"; }
}
if ($phpver[0] === "3")
{
function getversion() { return "Вы используете PHP3"; }
}
echo @getversion();
?>

Рассмотренный скрипт выводит версию используемого интерпретатора PHP. Одна и та же функция getversion() может возвращать различный результат, в зависимости от значения переменной $phpver.

Возврат функцией ссылки

Рассмотрим еще одну возможность пользовательских функций PHP - возврат ссылок. Приведем конкретный пример скрипта, использующего такую возможность:

<?php
$a = 100;
/* Далее идет функция, которая возвращает ссылку */
function &s () {
global $a;
// Возвращаем ссылку на переменную $a
return $a;
}
// Присваиваем ссылку переменной $b
$b = &s();
$b = 0;
echo $a; // Выводит 0
?>

Рассмотренный скрипт выведет 0, поскольку если вы измените значение одной из переменных ($a или $b), автоматически будет изменено значение другой переменной. Для разрыва связи между объектом и ссылкой, используйте оператор UnSet(). Подробнее о ссылках можно узнать здесь.

По материалам сайта: http://www.php.su/