スポンサーリンク
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)
新しいコメントを投稿
|HOME|
『Chromeで「このページでこれ以上ダイアログボックスを生成しない」が出ない「無限アラート」とその対策メモ』 OLD >>
スポンサーリンク