Operatorul pipe |> în PHP

Operatori PHP 8.5+

Trimite valoarea din stânga ca argument funcției din dreapta, ca să scrii transformări în lanț de la stânga la dreapta.

Sintaxă
$rezultat = $valoare |> functie(...) |> (fn($x) => ...);

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 |> trim sau $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ști ArgumentCountError. Î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.