Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Пользовательские функции PHP
 
 
 

Пользовательские функции в PHP (Часть 3)

Cтатические переменные

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

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

<?php
   function funct()
   {
      static $a;
      $a++;
      echo "$a";
   }
   for ($= 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 ($=== 0) return 1;
else return $x*factorial($x-1);
}
echo factorial(7);
?>

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

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

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

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

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

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

Смотрите также:

Глобальные переменные в PHP

 
 
 <<< Назад 
 Содержание 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS