Source of: /manual/en/functions.variable-functions.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.functions.inc";
$setup = array (
'home' =>
array (
0 => 'index.php',
1 => 'PHP Manual',
),
'head' =>
array (
0 => 'UTF-8',
1 => 'en',
),
'this' =>
array (
0 => 'functions.variable-functions.php',
1 => 'Variable functions',
),
'up' =>
array (
0 => 'language.functions.php',
1 => 'Functions',
),
'prev' =>
array (
0 => 'functions.returning-values.php',
1 => 'Returning values',
),
'next' =>
array (
0 => 'functions.internal.php',
1 => 'Internal (built-in) functions',
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div id="functions.variable-functions" class="sect1">
<h2 class="title">Variable functions</h2>
<p class="para">
PHP supports the concept of variable functions. This means that if
a variable name has parentheses appended to it, PHP will look for
a function with the same name as whatever the variable evaluates
to, and will attempt to execute it. Among other things, this can
be used to implement callbacks, function tables, and so forth.
</p>
<p class="para">
Variable functions won't work with language constructs such
as <a href="function.echo.php" class="function">echo()</a>, <a href="function.print.php" class="function">print()</a>,
<a href="function.unset.php" class="function">unset()</a>, <a href="function.isset.php" class="function">isset()</a>,
<a href="function.empty.php" class="function">empty()</a>, <a href="function.include.php" class="function">include()</a>,
<a href="function.require.php" class="function">require()</a> and the like. Utilize wrapper functions to make
use of any of these constructs as variable functions.
</p>
<p class="para">
</p><div class="example">
<p><b>Example #1 Variable function example</b></p>
<div class="example-contents programlisting">
<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 /> echo </span><span style="color: #DD0000">"In foo()<br />\n"</span><span style="color: #007700">;<br />}<br /><br />function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(</span><span style="color: #0000BB">$arg </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">)<br />{<br /> echo </span><span style="color: #DD0000">"In bar(); argument was '</span><span style="color: #0000BB">$arg</span><span style="color: #DD0000">'.<br />\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// This is a wrapper function around echo<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">echoit</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">)<br />{<br /> echo </span><span style="color: #0000BB">$string</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// This calls foo()<br /><br /></span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$func</span><span style="color: #007700">(</span><span style="color: #DD0000">'test'</span><span style="color: #007700">); </span><span style="color: #FF8000">// This calls bar()<br /><br /></span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'echoit'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$func</span><span style="color: #007700">(</span><span style="color: #DD0000">'test'</span><span style="color: #007700">); </span><span style="color: #FF8000">// This calls echoit()<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div><p>
</p>
<p class="para">
An object method can also be called with the variable functions syntax.
</p><div class="example">
<p><b>Example #2 Variable method example</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Foo<br /></span><span style="color: #007700">{<br /> function </span><span style="color: #0000BB">Variable</span><span style="color: #007700">()<br /> {<br /> </span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'Bar'</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">$name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// This calls the Bar() method<br /> </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">"This is Bar"</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$funcname </span><span style="color: #007700">= </span><span style="color: #DD0000">"Variable"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo</span><span style="color: #007700">-></span><span style="color: #0000BB">$funcname</span><span style="color: #007700">(); </span><span style="color: #FF8000">// This calls $foo->Variable()<br /><br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div><p>
</p>
<p class="para">
See also <a href="function.call-user-func.php" class="function">call_user_func()</a>,
<a href="language.variables.variable.php" class="link">
variable variables</a> and <a href="function.function-exists.php" class="function">function_exists()</a>.
</p>
</div><?php manual_footer(); ?>