Это же делается в функциях пользователя. Для присвоения значения по умолчанию сразу же после аргумента используется оператор =. Правая часть этого оператора представляет собой присваиваемое литеральное значение (листинг 4.8). Так как аргументы проверяются слева направо, значение по умолчанию необходимо задавать каждому аргументу, начиная с первого аргумента.
Листинг 4.8. Аргументы со значениями по умолчанию
<?php
function printColor($text,
$color="black", &$count=NULL)
{
//Напечатать текст в соответствии со стилем print("<span style="color: $color">" .
"$text</span>");
//При наличии счетчика инкрементировать его if(isset($count))
{
$count++;
}
}
// Вызов с одним аргументом printColor(" Это черный текст"); print("<br>n");
// Пренебречь цветом, принятым по умолчанию
printColor(" Это голубой текст", "blue");
print("<br>n");
// Передать ссылку на счетчик
$c = 0;
printColor(" Это красный текст", "red", $c); print("<br>n");
printColor(" Это зеленый текст", "green", $c);
print("<br>n");
print(" Счетчик $c<br>");
?>

Значение по умолчанию можно присвоить и необязательному аргументу. Аналогичный синтаксис можно использовать и для любого другого необязательного аргумента. При вызове функции без этого аргумента изменение этого значения не будет иметь никакого влияния вне функции. Однако если установить значение по умолчанию равным NULL, то можно легко убедиться в том, что он присутствует в вызове и может использоваться только в этом случае. Любой аргумент может быть сброшен по умолчанию, если ему присваивается значение NULL.
Кроме задания имен аргументов, доступ к ним можно также получить по их смещению. Для этого обычно используются функции func_get_arg, func_get_args и func_num_args (они описываются в главе 8, "Браузер ввода-вывода"). Программист может выбрать один аргумент с помощью функции func_get_arg или выбрать все аргументы одновременно с помощью функции func_get_args. Для того чтобы определить, сколько аргументов было передано, необходимо воспользоваться функцией func_num_args. Но здесь возникает одна сложность. Вызов функции с количеством аргументов, отличных от аргументов прототипа, не будет ошибкой, если функция не была задумана таким образом преднамеренно.
Почему же все-таки не возникает никакого желания использовать эти функции, а не объявлять их явным образом. Предположим, что с помощью функции, задающей количество аргументов, был создан целый список. Сначала необходимо разместить эти числа в массиве, который, в свою очередь, будет выбирать значения из массива. В то же время вместо такой сложной конфигурации можно задать функцию, которая будет принимать переменное число аргументов (листинг 4.9).

I Листинг 4.9. Функции с переменным числом аргументов_
<?php
function makeList()
{
print("<ol>n");
for($i=0; $i < func_num_args(); $i++)
{
print("<li>" . func_get_arg($i) . "</li>n");
}
print("</ol>n");
}
makeList("Linux", "Apache", "MySQL", "PHP");
?>