このすみノート

Webエンジニアが技術や趣味を書くブログです。

PHPでJavaScriptに似たアロー関数が書ける

業務でCodeIgniter4(CI4)を使っているのですが、同時にCI4のコード整形ツールを活用しています。

github.com

コード整形ツールの実態はphp-cs-fixerなのですが、コード整形された結果を眺めていると、ひとつ気になる挙動に気づきました。 一部の無名関数が、アロー関数へと置き換わっていたのです。

アロー関数とはなにか

おそらくJavaScript(JS)のアロー関数が、もっとも有名ではないかと思ってます。 JSでは、こんな感じのソースコードです。

// MDNより引用
const materials = [
  'Hydrogen',
  'Helium',
  'Lithium',
  'Beryllium'
];

console.log(materials.map(material => material.length));
// expected output: Array [8, 6, 7, 9]

JavaScriptではアロー関数と普通の関数において、thisの扱いが異なるといった重要な違いがあるものの、端的に言えば短く書けるのが楽です。

developer.mozilla.org

PHPのアロー関数

PHPのアロー関数を実際にarray_mapで活用してみると、こんな感じの実装イメージになります。 どちらも結果としては同じで、2倍された数値が出力されます。

<?php
// php test.php

$arr = [1, 2, 3];

// 無名関数
var_dump(array_map(function ($v) { return $v * 2; }, $arr));

// アロー関数
var_dump(array_map(static fn ($v) => $v * 2, $arr));
# php test.php
array(3) {
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(6)
}
array(3) {
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(6)

あとがき

PHPでもアロー関数が使えることはわかったのですが、まだ自分は違和感がありまして、書き方に慣れてはおりません。

JavaScriptのアロー関数は、this問題という重要な課題に対応するために覚えたのですが、PHPのアロー関数も書き続ければ、そのうち慣れるかもしれません。

基本的にはコード整形ツールに任せつつ、粛々とコードを書き続けていきたいと思います。