1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-27 17:22:14 +01:00
Files
archived-doc-ru/reference/funchand/functions/call-user-func-array.xml
2023-07-05 18:33:17 +03:00

276 lines
7.6 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5832a97c699c5e1bc808ee900447fe751af0d540 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.call-user-func-array" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>call_user_func_array</refname>
<refpurpose>Вызывает callback-функцию с массивом параметров</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>args</parameter></methodparam>
</methodsynopsis>
<para>
Вызывает callback-функцию <parameter>callback</parameter>,
с параметрами из массива <parameter>args</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>callback</parameter></term>
<listitem>
<para>
Вызываемая функция типа <type>callable</type>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>args</parameter></term>
<listitem>
<para>
Передаваемые в функцию параметры в виде массива.
</para>
<para>
Если все ключи <parameter>args</parameter> являются числовыми,
ключи игнорируются и каждый элемент будет передан
в параметр <parameter>callback</parameter> как позиционный аргумент,
по порядку.
</para>
<para>
Если какие-либо ключи <parameter>args</parameter> являются строками,
эти элементы будут переданы в параметр <parameter>callback</parameter>
как именованные аргументы, с именем, заданным ключом.
</para>
<para>
Произойдёт неисправимая ошибка, если числовой ключ в <parameter>args</parameter>
появляется после строкового ключа
или если строковый ключ не совпадает с именем любого параметра <parameter>callback</parameter>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает результат функции или &false; в случае возникновения ошибки.
</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>8.0.0</entry>
<entry>
Ключи параметра <parameter>args</parameter> теперь интерпретируются как имена параметров, а не игнорируются.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования функции <function>call_user_func_array</function></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";
}
}
// Вызываем функцию foobar() с 2 аргументами
call_user_func_array("foobar", array("one", "two"));
// Вызываем метод $foo->bar() с 2 аргументами
$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> c именем пространства имён</title>
<programlisting role="php">
<![CDATA[
<?php
namespace Foobar;
class Foo {
static public function test($name) {
print "Hello {$name}!\n";
}
}
call_user_func_array(__NAMESPACE__ .'\Foo::test', array('Hannes'));
call_user_func_array(array(__NAMESPACE__ .'\Foo', 'test'), array('Philip'));
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Hello Hannes!
Hello Philip!
]]>
</screen>
</example>
<example>
<title>Использование лямбда-функции</title>
<programlisting role="php">
<![CDATA[
<?php
$func = function($arg1, $arg2) {
return $arg1 * $arg2;
};
var_dump(call_user_func_array($func, array(2, 4)));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
int(8)
]]>
</screen>
</example>
<example>
<title>Передача значений по ссылке</title>
<programlisting role="php">
<![CDATA[
<?php
function mega(&$a){
$a = 55;
echo "function mega \$a=$a\n";
}
$bar = 77;
call_user_func_array('mega',array(&$bar));
echo "global \$bar=$bar\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
function mega $a=55
global $bar=55
]]>
</screen>
</example>
<example>
<title>Пример использования <function>call_user_func_array</function> с именованными аргументами</title>
<programlisting role="php">
<![CDATA[
<?php
function foobar($first, $second) {
echo __FUNCTION__, " получает $first и $second\n";
}
// Вызов функции foobar() с именованными аргументами в непозиционном порядке
call_user_func_array("foobar", array("second" => "two", "first" => "one"));
// Вызов функции foobar() с одним именованным аргументом
call_user_func_array("foobar", array("foo", "second" => "bar"));
// Неисправимая ошибка: Невозможно использовать позиционный аргумент после именованного аргумента
call_user_func_array("foobar", array("first" => "one", "bar"));
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
foobar получает one и two
foobar получает foo и bar
Fatal error: Uncaught Error: Cannot use positional argument after named argument
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&note.func-callback-exceptions;
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>call_user_func</function></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
-->