понедельник, 28 ноября 2011 г.

Функции, определяемые пользователем

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


<?php                                          
function foo($arg_1$arg_2/* ..., */ $arg_n)
{                                            
    echo 
"Example function.\n";              
    return 
$retval;                          
}                                              

?>
Внутри функции можно использовать любой корректный PHP-код, в том числе другие функции и даже объявления классов.
Имена функций следуют тем же правилам, что и другие метки в PHP. Корректное имя функции начинается с буквы или знака подчеркивания, за которым следует любое количество букв, цифр или знаков подчеркивания. В качестве регулярного выражения оно может быть выражено так: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Функции не обязаны быть определены до их использования, исключая тот случай, когда функции определяются условно, как это показано в двух последующих примерах.
В случае, когда функция определяется в зависимости от какого-либо условия, например, как это показано в двух приведенных ниже примерах, обработка описания функции должна предшествовать ее вызову.


<?php

$makefoo 
true;
/* Мы не можем вызвать функцию foo() в этом месте,
   поскольку она еще не определена, но мы можем
   обратиться к bar() */
bar();

if (
$makefoo) {
  function 
foo()
  {
    echo 
"Я не существую до тех пор, пока выполнение программы меня не достигнет.\n";
  }
}
/* Теперь мы благополучно можем вызывать foo(),
   поскольку $makefoo была интерпретирована как true */

if ($makefoofoo();

function 
bar()
{
  echo 
"Я существую сразу с начала старта программы.\n";
}
?>

    
Пример 2


<?php
function foo()
{
  function 
bar()
  {
    echo 
"Я не существую пока не будет вызвана foo().\n";
  }
}
/* Мы пока не можем обратиться к bar(),
   поскольку она еще не определена. */
foo();
/* Теперь мы  можем вызвать функцию bar(),
   обработка foo() сделала ее доступной. */
bar();
?> 
Все функции и классы PHP имеют глобальную область видимости - они могут быть вызваны вне функции, даже если были определены внутри и наоборот.
PHP не поддерживает перегрузку функции, также отсутствует возможность переопределить или удалить объявленную ранее функцию.


Замечание: Имена функций регистронезависимы, тем не менее, более предпочтительно вызывать функции так, как они были объявлены.