きくらげ観察日記

好きなことを、適当に。

Parse error: parse error, expecting `','' or `';''

先ほど友人が引っかかってたエラーです。
エラーの内容自体は大したことないものですが、恐ろしくググラビリティが低そうなのでこちらに纏めておきます。

起きたエラーは以下の通り:

class MyClass {
    private $hoge = 'abc' . 'def';
    ...
}

実行しようとすると、

Parse error: parse error, expecting `','' or `';''

と怒られてしまいます。
ちなみに、

class MyClass {
    private $hoge = 'abcdef';
}

は普通に実行できます。文字列を連結しようとした場合のみエラーになっています。

似たようなエラーのバリエーションとして「数値を足そうとしたらエラー」「関数を呼び出そうとしたらエラー」「andやorを取ろうとしたらエラー」等が考えられます。

実際のところ、このエラーが発生する原因は、PHPではメンバ変数の初期化時に動的に値を生成することができないためです。
複雑な式を使って初期化したい場合は、素直にコンストラクタ内でやりましょう。

class MyClass {
    private $hoge;

    function __construct() {
        $this->hoge = 'abc' . 'def';
    }
}

まあ、この言語仕様自体は納得できますし、それ自体に文句を言うつもりはありません。しかし、それにしてもエラーメッセージ不親切すぎやしませんかね……。

独習PHP 第2版

独習PHP 第2版