JavaScript Editor Javascript debugger     Website design 

Chapter 8. Functions

User-defined functions

A function may be defined using syntax such as the following:

Example 8.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]*.

Tip:

You may also want to take a look at the Appendix T, Userland Naming Guide.

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 8.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 8.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 8.4. Recursive functions

<?php
function recursion($a)
{
   if (
$a < 20) {
       echo
"$a\n";
       
recursion($a + 1);
   }
}
?>