Ce face Operatorul pipe |>
Operatorul |> (pipe) ia valoarea din stânga și o dă ca unic argument funcției din dreapta. $x |> f(...) este echivalent cu f($x).
Avantajul apare la mai mulți pași: în loc de strtoupper(trim($text)), citit din interior spre exterior, scrii $text |> trim(...) |> strtoupper(...), în ordinea în care se execută.
În dreapta trebuie să fie ceva apelabil care primește un singur parametru obligatoriu: o funcție scrisă ca trim(...) (first-class callable), o închidere, o funcție săgeată pusă între paranteze sau un obiect cu __invoke.
Parametri
| Parametru | Descriere |
|---|---|
stânga |
Orice valoare sau expresie. Este evaluată prima. |
dreapta |
Un callable cu un singur parametru obligatoriu. Funcțiile săgeată se scriu între paranteze: (fn($x) => $x * 2). |
Ce returnează
Valoarea returnată de funcția din dreapta.
Exemple
Exemplul 1: Curățarea unui nume în trei pași
<?php
$nume = " ana popescu ";
$slug = $nume
|> trim(...)
|> ucwords(...)
|> (fn($s) => str_replace(" ", "-", $s));
echo $slug;
Rezultat
Ana-Popescu
Exemplul 2: Un lanț de prelucrări pe un tablou
Funcțiile care cer mai mulți parametri (array_filter, array_map) se pun într-o funcție săgeată, care primește tabloul ca singur parametru.
<?php
$preturi = [12.5, 0, 99.9, 45, 0, 7.2];
$total = $preturi
|> (fn($t) => array_filter($t, fn($p) => $p > 0))
|> (fn($t) => array_map(fn($p) => $p * 1.21, $t))
|> array_sum(...)
|> (fn($s) => number_format($s, 2, ",", "."));
echo "Total cu TVA: $total lei";
Rezultat
Total cu TVA: 199,17 lei
Exemplul 3: Funcție săgeată fără paranteze
PHP refuză să compileze codul, pentru că nu ar fi clar unde se termină funcția săgeată.
<?php
$x = 5 |> fn($n) => $n * 2 |> strval(...);
Eroare afișată de PHP (codul nu rulează)
PHP Fatal error: Arrow functions on the right hand side of |> must be parenthesized in exemplu.php on line 2
Greșeli frecvente
- Scrii
$x |> trimsau$x |> trim(). Corect este$x |> trim(...): în dreapta stă un callable, nu un apel. - Pui în dreapta o funcție care cere doi parametri obligatorii, de exemplu
str_replace(...), și primeștiArgumentCountError. Înfășoar-o într-o funcție săgeată. - Uiți parantezele în jurul funcției săgeată:
|> (fn($x) => ...).
Comenzi înrudite
function () use / fn: O funcție fără nume, salvată într-o variabilă sau dată direct altei funcții. Poate folosi variabile din exterior cu use.array_map: Aplică o funcție pe fiecare element al unui tablou și returnează tabloul cu rezultatele.array_filter: Păstrează doar elementele dintr-un tablou care îndeplinesc o condiție.