A function may be defined using syntax such as the following:
   
    
| Example 17-1. Pseudo code to demonstrate function uses | 
<?phpfunction 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 | 
<?phpfunction 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 | 
<?phpfunction recursion($a)
 {
 if ($a < 20) {
 echo "$a\n";
 recursion($a + 1);
 }
 }
 ?>
 | 
 |