Приведем пример синтаксиса, используемого для описания функций:
Пример 17-1. Псевдокод для демонстрации использования функций
<?php function foo($arg_1, $arg_2, /* ..., */ $arg_n) { echo "Example function.\n"; return $retval; } ?>
|
|
Внутри функции можно использовать любой корректный PHP-код,
в том числе другие функции и даже объявления классов.
В PHP 3 функции должны были быть определены прежде, чем они будут
использованы. Начиная с PHP 4 такого ограничения нет, исключая
тот случай, когда функции определяются условно, как это показано
в двух последующих примерах.
В случае, когда функция определяется в зависимости от какого-либо условия, например,
как это показано в двух приведенных ниже примерах, обработка описания функции
должна предшествовать ее вызову.
Пример 17-2. Функции, зависящие от условий
<?php
$makefoo = true;
/* Мы не можем вызвать функцию foo() в этом месте, поскольку она еще не определена, но мы можем обратиться к bar() */
bar();
if ($makefoo) { function foo() { echo "I don't exist until program execution reaches me.\n"; } }
/* Теперь мы благополучно можем вызывать foo(), поскольку $makefoo была интерпретирована как true */
if ($makefoo) foo();
function bar() { echo "I exist immediately upon program start.\n"; }
?>
|
|
Пример 17-3. Вложенные функции
<?php function foo() { function bar() { echo "I don't exist until foo() is called.\n"; } }
/* Мы пока не можем обратиться к bar(), поскольку она еще не определена. */
foo();
/* Теперь мы можем вызвать функцию bar(), обработка foo() сделала ее доступной. */
bar();
?>
|
|
PHP не поддерживает перегрузку функции, также отсутствует возможность
переопределить или удалить объявленную ранее функцию.
Замечание:
Имена функций регистронезависимы, тем не менее, более предпочтительно
вызывать функции так, как они были объявлены.
PHP 3 не поддерживает переменное количество аргументов функции,
хотя поддержка значений по умолчанию для аргументов присутствует (смотрите раздел
Значения аргументов по умолчанию).
Начиная с 4-й версии PHP поддерживает и то, и другое: смотрите раздел
Списки аргументов переменной длины
и описания функций
func_num_args(),
func_get_arg(), и
func_get_args() для более детальной информации.