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); } } ?>
|
|