-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathcallable.xml
More file actions
170 lines (146 loc) · 5.55 KB
/
callable.xml
File metadata and controls
170 lines (146 loc) · 5.55 KB
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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: e8bb36e5dd60d2b8bc7ec8cdda2fa395c49e8194 Maintainer: ktretyak Status: ready -->
<!-- $Revision$ -->
<sect1 xml:id="language.types.callable">
<title>Зворотні виклики (Callbacks / Callables)</title>
<para>
Починаючи з PHP 5.4, зворотні виклики можуть позначатись через тип
<type>callable</type>, що означає - придатний для виклика. В даній
документації тип <type>callback</type> вживають з тією ж метою.
</para>
<para>
Деякі функції, наприклад, <function>call_user_func</function> або
<function>usort</function> приймають визначені користувачем callback-функції
в якості параметра. Callback-функції можуть бути не лише простими функціями,
але також і методами об'єктів, включаючи статичні методи класів.
</para>
<sect2 xml:id="language.types.callable.passing">
<title>Передача зворотніх викликів</title>
<para>
Як аргумент, функція PHP передається по імені у вигляді рядка. Будь-яка
вбудована або визначена користувачем функція може передаватись
таким чином, за виключенням мовних конструкцій, таких як:
<function>array</function>, <function>echo</function>,
<function>empty</function>, <function>eval</function>,
<function>exit</function>, <function>isset</function>,
<function>list</function>, <function>print</function> або
<function>unset</function>.
</para>
<para>
Метод, вже створеного об'єкта, передається в масиві, де сам об'єкт
має індекс 0, а його метод - індекс 1.
</para>
<para>
Також в масиві можна передавати статичний метод класа, коли в індексі 0,
замість об'єкта, йде назва класа. Починаючи з PHP 5.2.3, метод вже
можна передавати в форматі <literal>'ClassName::methodName'</literal>.
</para>
<para>
Окрім загальних функцій, визначених користувачем,
<link linkend="functions.anonymous">anonymous functions</link>
(анонімні функції) також можуть передаватись в якості callback-параметрів.
</para>
<para>
<example>
<title>
callback-функцій
</title>
<programlisting role="php">
<![CDATA[
<?php
// Приклад callback-функції
function my_callback_function() {
echo 'Привіт, Світ!';
}
// Приклад callback-метода
class MyClass {
static function myCallbackMethod() {
echo 'Привіт, Світ!';
}
}
// Тип 1: Простий callback
call_user_func('my_callback_function');
// Тип 2: Виклик статичного метода класа
call_user_func(array('MyClass', 'myCallbackMethod'));
// Тип 3: Виклик метода об'єкта
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Тип 4: Виклик статичного метода класа (Починаючи з PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Тип 5: Виклик відносного статичного метода (Починаючи з PHP 5.3.0)
class A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>
Передача анонімної функції в якості сallback-параметра
</title>
<programlisting role="php">
<![CDATA[
<?php
// Наша анонімна функція
$double = function($a) {
return $a * 2;
};
// Це наш діапазон номерів
$numbers = range(1, 5);
// Використовуємо анонімну функцію як callback-параметр для
// перемноження на 2 кожного елемента в нашому діапазоні
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
2 4 6 8 10
]]>
</screen>
</example>
</para>
<note>
<simpara>
В PHP 4, необхідно було використовувати посилання для створення callback,
який вказує на актуальний об'єкт, а не на його копію. Для уточнень,
прогляньте
<link linkend="language.references">Пояснення Посилань</link>.
</simpara>
</note>
¬e.func-callback-exceptions;
</sect2>
</sect1>
<!-- 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
-->