14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP パイプ演算子を試してみる

14
Last updated at Posted at 2026-04-11

はじめに

PHP 8.5からパイプ演算子が導入されたので、どんな使い方ができるのか試してみました。

パイプ演算子とは

PHP 8.5 以降では、callable に直接値を渡す演算子をサポートしています。 |> 演算子、または "パイプ" は、右辺にパラメーターをひとつ取る callable を受け入れ、左辺値をそれに渡し、callable の結果を評価します。 右辺の callable は、有効な PHP の callable であれば何でも構いません: つまり、Closure、 第一級callableを生成する記法、 __invoke() を実装したオブジェクトなどです。

説明文だけだとイメージしづらいので、動かしてみます。

文字列を大文字に変えてトリムする

  • パイプ演算子
$str = ' test ' 
    |> strtoupper(...)
    |> trim(...);

echo $str; // TEST

※関数は(...)を使って第一級callableとして扱う必要があります

  • 今までの書き方
$str = ' test ';
$str = strtoupper($str);
$str = trim($str);

echo $str; // TEST

パイプ演算子の方は初見だと何をしているのかわかりづらかったですが、今までの書き方と比べるとやっぱりスッキリします。

複数の引数を持つ関数を使いたい場合

先ほどの例では関数が持つ引数は全て1つだけでした。
引数を複数持つ関数の場合はアロー関数でどの引数に値を渡すか指定する必要があります。

$str = ' test '
    |> strtoupper(...)
    |> trim(...)
    |> (fn ($str) => str_replace('TEST', 'test', $str));

echo $str; // test

※アロー関数を利用する場合は()で囲わないと構文エラーになります

アロー関数が必要になるので、その分可読性が落ちてますが、どうやらPHP 8.6からは部分適用が追加される見込みで、その場合はアロー関数が不要になります。

部分適用を使用した場合

$str = ' test '
    |> strtoupper(...)
    |> trim(...)
    |> str_replace('TEST', 'test', ?); // ? に値が設定されます

echo $str; // test

部分適用が利用できるようになるとスッキリすることがわかります。

さいごに

部分適用が始まれば、よりパイプ演算子の書き方が主流になりそうなので、今のうちに慣れておいて損はなさそうです。

14
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?