Skip to content

Commit 8f4ab50

Browse files
committed
Translate functional operator
1 parent 0614150 commit 8f4ab50

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed

language/operators/functional.xml

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- EN-Revision: 2946c8a267734a9e8696e1764f7436e6caa8909c Maintainer: Fan2Shrek Status: ready -->
3+
<!-- Reviewed: yes -->
4+
<sect1 xml:id="language.operators.functional">
5+
<title>Opérateurs fonctionnels</title>
6+
<titleabbrev>Functional</titleabbrev>
7+
<para>
8+
PHP 8.5 et les versions ultérieures prennent en charge un opérateur qui fonctionne directement sur les callables. L'opérateur
9+
<literal>|></literal>, ou "pipe," accepte un callable à paramètre unique à droite et lui passe
10+
la valeur de gauche, évaluant le résultat du callable. Le callable
11+
sur la droite doit être n'importe quel callable PHP valide : une <classname>Closure</classname>,
12+
un <link linkend="functions.first_class_callable_syntax">callable de première classe</link>,
13+
un objet qui implémente <link linkend="object.invoke">__invoke()</link, etc.
14+
</para>
15+
<para>
16+
Cela signifie que les deux lignes suivantes sont logiquement équivalentes.
17+
<example>
18+
<title>Utilisation <literal>|></literal></title>
19+
<programlisting role="php">
20+
<![CDATA[
21+
<?php
22+
$result = "Hello World" |> strlen(...);
23+
print $result . PHP_EOL;
24+
25+
$result = strlen("Hello World");
26+
print $result . PHP_EOL;
27+
?>
28+
]]>
29+
</programlisting>
30+
&example.outputs;
31+
<screen>
32+
<![CDATA[
33+
11
34+
11
35+
]]>
36+
</screen>
37+
</example>
38+
</para>
39+
<para>
40+
Pour un appel unique ceci n'a pas beaucoup d'intérêt. Cela devient utile lorsque plusieurs appels sont enchaînés.
41+
C'est-à-dire que les deux fragments de code suivants sont logiquement équivalents.
42+
<example>
43+
<title>Enchaînement d'appels |></title>
44+
<programlisting role="php">
45+
<![CDATA[
46+
<?php
47+
$result = "PHP Rocks"
48+
|> htmlentities(...)
49+
|> str_split(...)
50+
|> (fn($x) => array_map(strtoupper(...), $x))
51+
|> (fn($x) => array_filter($x, fn($v) => $v != 'O'))
52+
;
53+
print $result . PHP_EOL;
54+
55+
$temp = "PHP Rocks";
56+
$temp = htmlentities($temp);
57+
$temp = str_split($temp);
58+
$temp = array_map(strtoupper(...), $temp);
59+
$temp = array_filter($temp, fn($v) => $v != 'O');
60+
$result = $temp;
61+
print $result . PHP_EOL;
62+
?>
63+
]]>
64+
</programlisting>
65+
&example.outputs;
66+
<screen>
67+
<![CDATA[
68+
Array
69+
(
70+
[0] => P
71+
[1] => H
72+
[2] => P
73+
[3] =>
74+
[4] => R
75+
[6] => C
76+
[7] => K
77+
[8] => S
78+
)
79+
Array
80+
(
81+
[0] => P
82+
[1] => H
83+
[2] => P
84+
[3] =>
85+
[4] => R
86+
[6] => C
87+
[7] => K
88+
[8] => S
89+
)
90+
]]>
91+
</screen>
92+
</example>
93+
</para>
94+
<para>
95+
Le coté gauche du pipe peut être n'importe quelle valeur ou expression. Le côté droit
96+
peut être n'importe quel callable PHP valide qui prend un seul paramètre, ou n'importe quelle expression
97+
qui évalue à un tel callable. Les fonctions avec plus d'un paramètre requis
98+
ne sont pas autorisées et échoueront comme si la fonction était appelée normalement
99+
avec des arguments insuffisants. Les fonctions qui prennent une variable par référence ne sont pas autorisées.
100+
Si le côté droit n'évalue pas à un callable valide, cela générera une erreur.
101+
</para>
102+
<note>
103+
<para>
104+
Soyez conscient que, pour éviter toute ambiguïté syntaxique, les <link linkend="functions.arrow">fonctions fléchées</link>
105+
DOIVENT être entourées de parenthèses lorsqu'elles sont utilisées avec un opérateur pipe, comme dans les exemples ci-dessus.
106+
Ne pas le faire entraînera une erreur fatale.
107+
</para>
108+
</note>
109+
110+
<sect2 role="seealso">
111+
&reftitle.seealso;
112+
<para>
113+
<simplelist>
114+
<member><classname>Closure</classname></member>
115+
</simplelist>
116+
</para>
117+
</sect2>
118+
</sect1>

0 commit comments

Comments
 (0)