情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

PHP:explodeで「PHP Parse error: syntax error, unexpected ‘[‘ 」が出た理由メモ

PHP (25)

PHPのexplode関数を使って文字列を区切り文字の前後に分割して、後半部分を取得しようと「$after = explode( ':', $line )[1]」のようなコードを書いたところ、「PHP Parse error: syntax error, unexpected '[' 」というシンタックスエラー(文法エラー)になってしまいました。こういう書き方ができないのか何が原因なのか、メモしておきます。

explodeの戻り値配列の要素に直接アクセスできない

PHPのコードに、次のようなコードを記述しました。

$after = explode( ':', $line )[1];

このコードは、「xxxx:yyyy」のようなコードを「:」で分割し、その内の後半(yyyy)を取得するコードです。

しかし、このコードを文法チェックのコマンド(PHP -l)にかけてみたところ、

PHP Parse error: syntax error, unexpected '['

というエラーが検出されてしまいました。

サンプル的に、文法は間違っていない?

どうやら、関数の戻り値配列の要素に直接「[1]」でアクセスしているのが問題のようなのですが、そのような使用方法は、直接explodeでやっているパターンはすぐには見つからなかったものの、他の関数を使ったパターンであれば、いくつも見つかりました。

また、編集に使っていたace editorも、文法エラーを表示しませんでした。

原因はPHPのバージョン

続けて色々調べていると、次の記述が見つかりました。

PHP 5.4 以降では、関数やメソッドの返す結果を直接配列として扱えるようになりました。 以前は、いったん一次変数に代入しないと配列としては扱えませんでした。 引用元

つまり、インストールされているPHPがPHP 5.4以前だと、explode( , )[1]のような記述は文法エラーになってしまうようです。

というわけで、これならace editorで文法エラーにならず(分布チェックのバージョンが新しい)、php -lでエラーになる理由にも納得です。

「PHP --version」をしてみると、「PHP 5.3.3」でした。

コメント(0)

新しいコメントを投稿