4.4. Статические переменные
Очень важно понимать, что при создании переменной в теле функции время ее су­ществования измеряется временем выполнения функции. После того как выполнение функции завершается и управление передается вызвавшему ее процессу, все пространство переменных функции очищается. Иногда это нежелательно, так как возможны ситуации, когда функции должны помнить значения, хранящиеся в переменных функции в промежутках между ее вызовами. Это можно осуществить, используя глобальные пе­ременные, но более элегантным решением является использование оператора static.
Статическую переменную можно объявить в начале функции до того, как будут заданы какие-либо команды. Эта переменная сохранит присвоенное ей значение после завершения работы функции. Для чего это необходимо? Предположим, что, как показано в листинге 4.6, строки данной таблицы имеют разный фоновый цвет.
 Листинг 4.6. Демонстрация статических переменных
<?
function useColor()
{
//Запомнить последний использованный цвет
static $ColorValue = "#00FF00";
//Выбрать следующий цвет if($ColorValue == "#00FF00")
{
$ColorValue = "#CCFFCC";
}
else
{
$ColorValue = "#00FF00";
}
return($ColorValue);
}
print("<table width="300">n"); for($count=0; $count < 10; $count++)
{
//Задать цвет текущей строки
$RowColor = useColor();
/*
** Распечатать HTML-код строки 
** Задать фоновый цвет
*/
print("<tr>" .
"<td style=" фон: $RowColor">" .
" Строка номер $count" .
"</td>" . "</tr>n");
}
print("</table>n");
?>

В главе 6, "Классы и объекты", описываются члены статического класса, которые отличаются от статических переменных, используемых в функциях.
4.5. Аргументы
При объявлении функции можно объявить аргументы. Аргументы указываются в скобках и отделяются друг от друга запятыми. Аргументам должен предшествовать символ доллара. Внутри функции они становятся переменными. При вызове функции она принимает передаваемые значения.
По умолчанию аргументы копируют переданные значения в локальную переменную, еще известную как передаваемое значение. Если аргументу функции предшествует оператор &, переменная становится псевдонимом передаваемого значения и называется ссылкой на переменную. При изменении значения переменной, на которую дается ссылка, изменения вносятся и в оригинал. Объяснение феномена ссылок на переменные см. в главе 2, "Переменные, операторы и выражения".
Предположим, что, для того чтобы продемонстрировать эту идею, нам необходима функция, которая удаляет из чисел запятые. Таким образом, если в поле ввода мы получим что-нибудь вроде 10,000, то должны быть уверены, что это десять тысяч, а не просто десять. Создадим функцию, которая удаляет все запятые из вводимой функции. Но для этого мы планируем только передать переменную и получить ее видоизмененной. Такие возможности продемонстрированы в листинге 4.7.
Кроме того, можно сделать этот аргумент необязательным. Многие встроенные функции имеют такую возможность. Рассмотрим уже знакомую вам функцию date. Ей необходимо передать один или два аргумента date. Первым аргументом является формат возвращаемого значения, а вторым - временная метка (дата в секундах начиная с 1 января 1970 года). Если второй аргумент не задан, используется текущее время.

| Листинг 4.7. Передача аргументов с помощью ссылок
<?php
function stripCommas(&$text)
{
$text = str_replace(",", "", $text);
}
$myNumber = "10,000";
stripCommas($myNumber);
print($myNumber);
?>