A function may be defined using syntax such as the following:
   
    
Example 17-1. Pseudo code to demonstrate function uses 
<?php function foo($arg_1, $arg_2, /* ..., */ $arg_n) {     echo "Example function.\n";     return $retval; } ?>
 |  
  | 
   
    Any valid PHP code may appear inside a function, even other
    functions and class
    definitions.
   
    Function names follow the same rules as other labels in PHP. A
    valid function name starts with a letter or underscore, followed
    by any number of letters, numbers, or underscores. As a regular
    expression, it would be expressed thus:
    [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
   
    In PHP 3, functions must be defined before they are referenced. No
    such requirement exists since PHP 4. Except when
    a function is conditionally defined such as shown in the two examples
    below.
   
    When a function is defined in a conditional manner such as the two
    examples shown.  Its definition must be processed prior
    to being called.
   
    
Example 17-2. Conditional functions 
<?php
  $makefoo = true;
  /* We can't call foo() from here     since it doesn't exist yet,    but we can call bar() */
  bar();
  if ($makefoo) {   function foo()   {     echo "I don't exist until program execution reaches me.\n";   } }
  /* Now we can safely call foo()    since $makefoo evaluated to true */
  if ($makefoo) foo();
  function bar()  {   echo "I exist immediately upon program start.\n"; }
  ?>
 |  
  | 
   
    
Example 17-3. Functions within functions 
<?php function foo()  {   function bar()    {     echo "I don't exist until foo() is called.\n";   } }
  /* We can't call bar() yet    since it doesn't exist. */
  foo();
  /* Now we can call bar(),    foo()'s processesing has    made it accessible. */
  bar();
  ?>
 |  
  | 
   
    All functions and classes in PHP have the global scope - they can be
    called outside a function even if they were defined inside and vice versa.
   
    PHP does not support function overloading, nor is it possible to
    undefine or redefine previously-declared functions.
   
Note: 
     Function names are case-insensitive, though it is usually good form
     to call functions as they appear in their declaration.
    
    PHP 3 does not support variable numbers of arguments to functions,
    although default arguments are supported (see Default argument
    values for more information). Both are supported, as of PHP 4: see Variable-length argument
    lists and the function references for
    func_num_args(),
    func_get_arg(), and
    func_get_args() for more information.
   
    It is possible to call recursive functions in PHP. However avoid recursive
    function/method calls with over 100-200 recursion levels as it can smash
    the stack and cause a termination of the current script.
    
Example 17-4. Recursive functions 
<?php function recursion($a) {     if ($a < 20) {         echo "$a\n";         recursion($a + 1);     } } ?>
 |  
  |