-
Notifications
You must be signed in to change notification settings - Fork 148
/
callable.xml
187 lines (160 loc) · 4.92 KB
/
callable.xml
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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: c897161ca5a62a887295c695adc161b8fde5d772 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes Maintainer: girgias -->
<!-- CREDITS: DavidA -->
<sect1 xml:id="language.types.callable">
<title>Fonctions de rappel / Types Callable</title>
<para>
Les fonctions de rappel peuvent être identifiées via le type <type>callable</type>.
</para>
<para>
Certaines fonctions, comme <function>call_user_func</function> ou
<function>usort</function>, acceptent comme paramètre des fonctions de rappel
définies par l'utilisateur. Les fonctions de rappel peuvent être de simples
fonctions, mais aussi des méthodes d'&object;s, y compris des méthodes
statiques de classe.
</para>
<sect2 xml:id="language.types.callable.passing">
<title>Passage d'une fonction de rappel</title>
<para>
Une fonction PHP est passée par son nom, sous forme de &string;.
Toute fonction interne ou définie par l'utilisateur peut être utilisée,
sauf les constructions de langage comme :
<function>array</function>, <function>echo</function>,
<function>empty</function>, <function>eval</function>,
<function>exit</function>, <function>isset</function>,
<function>list</function>, <function>print</function>, ou
<function>unset</function>.
</para>
<para>
Une méthode d'un &object; instancié est passée comme un &array; contenant
un &object; à l'index 0, et le nom de la méthode à l'index 1.
Accéder aux méthodes protégées et privées à l'intérieur d'une classe
est autorisé.
</para>
<para>
Les méthodes statiques de classe peuvent aussi être passées sans instancier
d'&object; de cette classe soit, en passant le nom de la classe au lieu d'un
&object; à l'index 0, ou en passant
<literal>'NomDeLaClasse::NomDeLaMethode'</literal>.
</para>
<para>
En dehors des fonctions définies normalement par l'utilisateur,
les <link linkend="functions.anonymous">fonctions anonymes</link> et
les <link linkend="functions.arrow">fonctions fléchées</link>
peuvent aussi être utilisées comme paramètre de type callback.
</para>
<note>
<para>
À partir de PHP 8.1.0, les fonctions anonymes peuvent aussi être créées en utilisant la
<link linkend="functions.first_class_callable_syntax">syntaxe callable de première classe</link>.
</para>
</note>
<para>
Généralement, tout objet implémentant <link linkend="object.invoke">__invoke()</link>
peut aussi être passé au paramètre callback.
</para>
<para>
<example>
<title>
Exemples de fonctions de rappel
</title>
<programlisting role="php">
<![CDATA[
<?php
// Un exemple de fonction de rappel
function my_callback_function() {
echo 'hello world!';
}
// Un exemple de méthode de rappel
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Type 1 : Fonction de rappel simple
call_user_func('my_callback_function');
// Type 2 : Appel d'une méthode statique de classe
call_user_func(array('MyClass', 'myCallbackMethod'));
// Type 3 : Appel d'une méthode objet
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Type 4 : Appel d'une méthode statique de classe
call_user_func('MyClass::myCallbackMethod');
// Type 5 : Appel à une méthode statique de classe relative
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, obsoléte à partir de PHP 8.2.0
// Type 6 : Les objets implémentent __invoke peuvent être utilisés comme callables
class C {
public function __invoke($name) {
echo 'Hello ', $name, "\n";
}
}
$c = new C();
call_user_func($c, 'PHP!');
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>
Exemple d'une fonction de rappel utilisant une Closure
</title>
<programlisting role="php">
<![CDATA[
<?php
// Notre closure
$double = function($a) {
return $a * 2;
};
// Ceci est notre intervalle de nombres
$numbers = range(1, 5);
// Utilisation de la closure comme fonction de rappel.
// Ici, pour doubler la taille de chaque élément de notre intervalle
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
2 4 6 8 10
]]>
</screen>
</example>
</para>
¬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
-->