PHP

【PHP】Parse error: syntax error, unexpected ‘変数名’ (T_VARIABLE), expecting function (T_FUNCTION) or const (T_CONST) in ファイル名 on line 行数

PHPコーディング画像

こんにちは!ゆーたろうです。

今回は、PHPプログラミング中に発生したエラーに対する解決策を紹介します。

シンタックスエラー(構文エラー)Parse error: syntax errorが発生

まず、発生したエラーはこちらです。

Parse error: syntax error, unexpected ‘変数名’ (T_VARIABLE), expecting function (T_FUNCTION) or const (T_CONST) in ファイル名 on line 行数

このエラーの意味

「syntax error」となっているので、syntax=構文がおかしいと言われています。

このエラーが発生した時のプログラムはこちらです。

class Test{
	function AAA(){
		return 2 * 3 - $this->a;
	}

	public $a;  ・・・ここでエラー!!

	function BBB(&$val){
		$val = "テスト";
		return true;
	}
}

今回は記事ようにクラスを書き直していて、実際のメソッド名などは異なりますが、このようにクラスを書いたところ、エラーとなったのです。

原因は、クラスのプロパティを宣言する場所がおかしかった

調べても直接的な解決方法が見つかりませんでした。。

そのため、とりあえず、エラーの行数となっているプロパティの宣言「public $a;」を上に移動させたところ、解決されました。

class Test{
	public $a;  ・・・プロパティ宣言を上部に移動!!

	function AAA(){
		return 2 * 3 - $this->a;
	}

	function BBB(&$val){
		$val = "テスト";
		return true;
	}
}

なぜこれでいけるのか分かりませんが、うまく行ったのでよしとしましょう。

他の参考書を見ると、

class Test{

	function AAA(){
		return 2 * 3 - $this->a;
	}

	function BBB(&$val){
		$val = "テスト";
		return true;
	}

	public $a;
}

というように、プロパティ宣言がクラスの下部に設定しているものあるので、中央でも行けるかなと思っていましたが、中央に宣言するのはうまく行きませんでした。

もともとなぜ中央部分にプロパティ宣言しようとしたかと言えば、個人的な見やすさのためです。

メソッドで参照するプロパティは、なるべくそのメソッドのすぐ上で定義しておけば、分かりやすいので、そうしたんです。

今回の例で言えば、メソッドAAA()でプロパティ$aを使っているので、AAA()のすぐ上でできれば定義したかったのが、プロパティを中央に宣言した狙いでした。

 

まとめ

シンタックスエラーは大変よく見かけるエラーですが、まさかこういうところで躓くとは思いもしなかったので、驚きでした。

一番安全なのは、今回みたいな亜種的なコードを書くのではなく、ちゃんと言語仕様に則った書き方をしたほうがいいなと、勉強になりました。

横着せずにコーディングですね^^;)