1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
|
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 325661 $ -->
<refentry xml:id="function.call-user-func-array" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>call_user_func_array</refname>
<refpurpose>Call a callback with an array of parameters</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>mixed</type><methodname>call_user_func_array</methodname>
<methodparam><type>callable</type><parameter>callback</parameter></methodparam>
<methodparam><type>array</type><parameter>param_arr</parameter></methodparam>
</methodsynopsis>
<para>
Calls the <parameter>callback</parameter> given by the first parameter with
the parameters in <parameter>param_arr</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>callback</parameter></term>
<listitem>
<para>
The <type>callable</type> to be called.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>param_arr</parameter></term>
<listitem>
<para>
The parameters to be passed to the callback, as an indexed array.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Returns the return value of the callback, or &false; on error.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>5.3.0</entry>
<entry>
The interpretation of object oriented keywords like <literal>parent</literal>
and <literal>self</literal> has changed. Previously, calling them using the
double colon syntax would emit an <constant>E_STRICT</constant> warning because
they were interpreted as static.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>call_user_func_array</function> example</title>
<programlisting role="php">
<![CDATA[
<?php
function foobar($arg, $arg2) {
echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
function bar($arg, $arg2) {
echo __METHOD__, " got $arg and $arg2\n";
}
}
// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));
// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
foobar got one and two
foo::bar got three and four
]]>
</screen>
</example>
<example>
<title><function>call_user_func_array</function> using namespace name</title>
<programlisting role="php">
<![CDATA[
<?php
namespace Foobar;
class Foo {
static public function test($name) {
print "Hello {$name}!\n";
}
}
// As of PHP 5.3.0
call_user_func_array(__NAMESPACE__ .'\Foo::test', array('Hannes'));
// As of PHP 5.3.0
call_user_func_array(array(__NAMESPACE__ .'\Foo', 'test'), array('Philip'));
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Hello Hannes!
Hello Philip!
]]>
</screen>
</example>
<example>
<title>Using lambda function</title>
<programlisting role="php">
<![CDATA[
<?php
$func = function($arg1, $arg2) {
return $arg1 * $arg2;
};
var_dump(call_user_func_array($func, array(2, 4))); /* As of PHP 5.3.0 */
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
int(8)
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Before PHP 5.4, referenced variables in <parameter>param_arr</parameter>
are passed to the function by reference, regardless of whether the function
expects the respective parameter to be passed by reference. This form of
call-time pass by reference does not emit a deprecation notice, but it is
nonetheless deprecated, and has been removed in PHP 5.4.
Furthermore, this does not apply to internal functions, for which
the function signature is honored. Passing by value when the function
expects a parameter by reference results in a warning and having
<function>call_user_func</function> return &false; (there is, however, an
exception for passed values with reference count = 1, such as in literals,
as these can be turned into references without ill effects — but also
without writes to that value having any effect —; do not rely
in this behavior, though, as the reference count is an implementation
detail and the soundness of this behavior is questionable).
</para>
</note>
¬e.func-callback-exceptions;
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>call_user_func</function></member>
<member>&seealso.callback;</member>
<member><methodname>ReflectionFunction::invokeArgs</methodname></member>
<member><methodname>ReflectionMethod::invokeArgs</methodname></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|