<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>User-defined functions</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.functions.html">Functions</a></div> <div class="next" style="text-align: right; float: right;"><a href="functions.arguments.html">Function arguments</a></div> <div class="up"><a href="language.functions.html">Functions</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="functions.user-defined" class="sect1"> <h2 class="title">User-defined functions</h2> <p class="para"> A function may be defined using syntax such as the following: </p> <p class="para"> <div class="example" id="example-150"> <p><strong>Example #1 Pseudo code to demonstrate function uses</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">, </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">, </span><span style="color: #FF8000">/* ..., */ </span><span style="color: #0000BB">$arg_n</span><span style="color: #007700">)<br />{<br /> echo </span><span style="color: #DD0000">"Example function.\n"</span><span style="color: #007700">;<br /> return </span><span style="color: #0000BB">$retval</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="simpara"> Any valid PHP code may appear inside a function, even other functions and <a href="keyword.class.html" class="link">class</a> definitions. </p> <p class="para"> 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: <em>[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*</em>. </p> <div class="tip"><strong class="tip">Tip</strong><p class="simpara">See also the <a href="userlandnaming.html" class="xref">Userland Naming Guide</a>.</p></div> <p class="simpara"> Functions need not be defined before they are referenced, <em class="emphasis">except</em> when a function is conditionally defined as shown in the two examples below. </p> <p class="para"> When a function is defined in a conditional manner such as the two examples shown. Its definition must be processed <em class="emphasis">prior</em> to being called. </p> <p class="para"> <div class="example" id="example-151"> <p><strong>Example #2 Conditional functions</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /><br />$makefoo </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* We can't call foo() from here <br /> since it doesn't exist yet,<br /> but we can call bar() */<br /><br /></span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br /><br />if (</span><span style="color: #0000BB">$makefoo</span><span style="color: #007700">) {<br /> function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br /> {<br /> echo </span><span style="color: #DD0000">"I don't exist until program execution reaches me.\n"</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #FF8000">/* Now we can safely call foo()<br /> since $makefoo evaluated to true */<br /><br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">$makefoo</span><span style="color: #007700">) </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /><br />function </span><span style="color: #0000BB">bar</span><span style="color: #007700">() <br />{<br /> echo </span><span style="color: #DD0000">"I exist immediately upon program start.\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="para"> <div class="example" id="example-152"> <p><strong>Example #3 Functions within functions</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">() <br />{<br /> function </span><span style="color: #0000BB">bar</span><span style="color: #007700">() <br /> {<br /> echo </span><span style="color: #DD0000">"I don't exist until foo() is called.\n"</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #FF8000">/* We can't call bar() yet<br /> since it doesn't exist. */<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">/* Now we can call bar(),<br /> foo()'s processing has<br /> made it accessible. */<br /><br /></span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="para"> 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. </p> <p class="simpara"> PHP does not support function overloading, nor is it possible to undefine or redefine previously-declared functions. </p> <blockquote class="note"><p><strong class="note">Note</strong>: <span class="simpara"> Function names are case-insensitive, though it is usually good form to call functions as they appear in their declaration. </span> </p></blockquote> <p class="simpara"> Both <a href="functions.arguments.html#functions.variable-arg-list" class="link">variable number of arguments</a> and <a href="functions.arguments.html#functions.arguments.default" class="link">default arguments</a> are supported in functions. See also the function references for <span class="function"><a href="function.func-num-args.html" class="function">func_num_args()</a></span>, <span class="function"><a href="function.func-get-arg.html" class="function">func_get_arg()</a></span>, and <span class="function"><a href="function.func-get-args.html" class="function">func_get_args()</a></span> for more information. </p> <p class="para"> 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. <div class="example" id="example-153"> <p><strong>Example #4 Recursive functions</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">recursion</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">)<br />{<br /> if (</span><span style="color: #0000BB">$a </span><span style="color: #007700">< </span><span style="color: #0000BB">20</span><span style="color: #007700">) {<br /> echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">recursion</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /> }<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.functions.html">Functions</a></div> <div class="next" style="text-align: right; float: right;"><a href="functions.arguments.html">Function arguments</a></div> <div class="up"><a href="language.functions.html">Functions</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>