Skip to content

Commit 98b7711

Browse files
committed
sync with en rev
1 parent 754fb82 commit 98b7711

2 files changed

Lines changed: 118 additions & 1 deletion

File tree

language/operators.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<!-- EN-Revision: 16934048f79c6e117cd16a23c09c1b2ea502e284 Maintainer: leonardolara Status: ready --><!-- CREDITS: felipe,ae,fabioluciano,rogeriopradoj,leonardolara -->
2+
<!-- EN-Revision: 2946c8a267734a9e8696e1764f7436e6caa8909c Maintainer: leonardolara Status: ready --><!-- CREDITS: felipe,ae,fabioluciano,rogeriopradoj,leonardolara -->
33
<chapter xml:id="language.operators" xmlns="http://docbook.org/ns/docbook" annotations="interactive">
44
<title>Operadores</title>
55
<simpara>
@@ -42,6 +42,7 @@
4242
&language.operators.string;
4343
&language.operators.array;
4444
&language.operators.type;
45+
&language.operators.functional;
4546

4647
</chapter>
4748
<!-- Keep this comment at the end of the file

language/operators/functional.xml

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
<?xml version="1.0" encoding="utf-8"?><!-- EN-Revision: 2946c8a267734a9e8696e1764f7436e6caa8909c Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
2+
<sect1 xml:id="language.operators.functional">
3+
<title>Operadores Funcionais</title>
4+
<titleabbrev>Funcional</titleabbrev>
5+
<para>
6+
O PHP 8.5 e versões posteriores suportam um operador que funciona diretamente em chamáveis. O operador <literal>|></literal>,
7+
ou "pipe", aceita um chamável de parâmetro único à direita e passa
8+
o valor do lado esquerdo para ele, avaliando o resultado do chamável. O chamável
9+
à direita pode ser qualquer chamável PHP válido: um <classname>Closure</classname>,
10+
um <link linkend="functions.first_class_callable_syntax">chamável de primeira classe</link>,
11+
um objeto que implementa <link linkend="object.invoke">__invoke()</link>, etc.
12+
</para>
13+
<para>
14+
Isso significa que as duas linhas seguintes são logicamente equivalentes.
15+
<example>
16+
<title>Usando <literal>|></literal></title>
17+
<programlisting role="php">
18+
<![CDATA[
19+
<?php
20+
$result = "Hello World" |> strlen(...);
21+
print $result . PHP_EOL;
22+
23+
$result = strlen("Hello World");
24+
print $result . PHP_EOL;
25+
?>
26+
]]>
27+
</programlisting>
28+
&example.outputs;
29+
<screen>
30+
<![CDATA[
31+
11
32+
11
33+
]]>
34+
</screen>
35+
</example>
36+
</para>
37+
<para>
38+
Para uma única chamada, isso não é muito útil. Torna-se útil quando várias chamadas são encadeadas.
39+
Ou seja, os dois fragmentos de código a seguir são logicamente equivalentes:
40+
<example>
41+
<title>Encadeando chamadas com |></title>
42+
<programlisting role="php">
43+
<![CDATA[
44+
<?php
45+
$result = "PHP Rocks"
46+
|> htmlentities(...)
47+
|> str_split(...)
48+
|> (fn($x) => array_map(strtoupper(...), $x))
49+
|> (fn($x) => array_filter($x, fn($v) => $v != 'O'))
50+
;
51+
print $result . PHP_EOL;
52+
53+
$temp = "PHP Rocks";
54+
$temp = htmlentities($temp);
55+
$temp = str_split($temp);
56+
$temp = array_map(strtoupper(...), $temp);
57+
$temp = array_filter($temp, fn($v) => $v != 'O');
58+
$result = $temp;
59+
print $result . PHP_EOL;
60+
?>
61+
]]>
62+
</programlisting>
63+
&example.outputs;
64+
<screen>
65+
<![CDATA[
66+
Array
67+
(
68+
[0] => P
69+
[1] => H
70+
[2] => P
71+
[3] =>
72+
[4] => R
73+
[6] => C
74+
[7] => K
75+
[8] => S
76+
)
77+
Array
78+
(
79+
[0] => P
80+
[1] => H
81+
[2] => P
82+
[3] =>
83+
[4] => R
84+
[6] => C
85+
[7] => K
86+
[8] => S
87+
)
88+
]]>
89+
</screen>
90+
</example>
91+
</para>
92+
<para>
93+
O lado esquerdo do pipe pode ser qualquer valor ou expressão. O lado direito
94+
pode ser qualquer chamável PHP válido que receba um único parâmetro, ou qualquer expressão
95+
que seja avaliado como tal chamável. Funções com mais de um parâmetro obrigatório
96+
não são permitidas e falharão como se fossem chamadas normalmente
97+
com argumentos insuficientes. Funções que recebem uma variável por referência não são permitidas.
98+
Se o lado direito não for avaliado como um chamável válido, será gerado um erro.
99+
</para>
100+
<note>
101+
<para>
102+
Esteja ciente de que, para evitar ambiguidade de sintaxe, <link linkend="functions.arrow">funções de seta</link>
103+
PRECISAM ser colocadas entre parênteses quando usadas com um operador de pipe, como nos exemplos acima.
104+
Caso contrário, ocorrerá um erro fatal.
105+
</para>
106+
</note>
107+
108+
<sect2 role="seealso">
109+
&reftitle.seealso;
110+
<para>
111+
<simplelist>
112+
<member><classname>Closure</classname></member>
113+
</simplelist>
114+
</para>
115+
</sect2>
116+
</sect1>

0 commit comments

Comments
 (0)