ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

PHP8, パラメータの最後にカンマ(,)が付けられる - 文法(シンタックス)の変更

php
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

PHP8では、パラメータの最後にカンマ(,)が付けられるようになりました。

でも、この記法の導入はおすすめしません。PHP7.4以下では文法エラー(Syntax error)になって致命的だから。

最後のカンマを付けない従来の記法でも通じるので、あえて使う理由はありません。

言葉でつらつらと書くよりもコードを見れば百聞は一見にしかずです。

<?php

function test($a, $b, $c,) // 最後にカンマが付けられる。
{
    echo 'function end' . PHP_EOL ;
}

test(1, 2, 3, ); // 最後にカンマが付けられる。
php80の実行結果
function end

当然ですが、この記法はPHP7以前はシンタックスエラー(Syntax error)です。

php74の実行結果
PHP Parse error:  syntax error, unexpected ')', expecting variable (T_VARIABLE) in /home/vagrant/php-test.php on line 3

PHP公式ドキュメント

関数の引数

この文法の変更は、クラスのメソッド、無名関数の変数の引き継ぎで使うuseのパラメータでも同じ。

もちろん、PHP7以前はシンタックスエラーになります。

class Test
{
    private $a;
    private $b;

    public function __construct($a, $b,)// 最後にカンマが付けられる
    {
        $this->a = $a;
        $this->b = $b;
        echo 'new instance!' . PHP_EOL;

        // 無名関数
        $anonymous = function () use ($a, $b,) { // 最後にカンマが付けられる
            echo 'anonymous end' . PHP_EOL;
        };

        $anonymous();
    }
}

$test = new Test(1, 2,); // 最後にカンマが付けられる
php80の実行結果
new instance!
anonymous end

PHP CodeSniffer などの静的コードチェックツールは微妙

最近のプログラミングではPHP CodeSnifferなどを使って、プログラミングしながら文法エラーなどのチェックも同時にしていると思います。

しかし、今回の文法変更の対応は微妙です。

関数やメソッドの定義では問題ないですが、関数コール、インスタンス作成、メソッドコール時はエラーが出ます。

test(1, 2, 3,);
コーディングチェックエラー
No space found after comma in argument list
test(1, 2, 3, );
コーディングチェックエラー
Expected 0 spaces before closing parenthesis; 1 found

スペースが無いというから直したのに、今度は1個のスペースが余計だと言われます。

これはデフォルト設定の場合。カスタマイズすれば対応できますが、関数コールで最後にカンマが付くと体のどこかが痒くなる気持ち悪さがある。

個人的にはデフォルト設定でいいと思う。

前の投稿
PHP8, パラメータやリターン値が変わる関数。リターン値の判定は注意が必要。
PHP8, 例外キャッチで変数がなくてもいい - 文法(シンタックス)の変更
次の投稿
コメントを残す

*