変数名をマルチバイト文字をすることが可能らしい

December 23, 2010,
tags: php


このエントリーをはてなブックマークに追加

結構長い間PHPをやっていたのですが、全然知らなかった仕様が・・・

以下のようなコードを書いたら、Syntax errorが出ずにNoticeだけ出ていました。

<?php
$test = true;
if ( $test == true){
        echo "test";
}
else {
        echo "error";
}
?>
PHP Notice:  Undefined variable: test  in /home/polidog/test2.php on line 3

僕はてっきりSyntax Errorで処理が止まると思っていたのですが、なぜかNoticeが・・・。
そして、falseという判定になっていました。

どうやら、ifの中の変数の認識が「$test」だと思っていたら、「$test 」として認識していたため「Undefined variable」と言われていたみたいです。
変数名にマルチバイトを使ってもエラーにならないなんて・・・。
つまり以下のようなコードを書いても普通に実行されてしまうということですね。

<?php
$ポリドッグ = true;
if ( $ポリドッグ == true){
	echo "test";
}
?>

PHPすげー。超こわい・・・。
EclipseでJStyleとか使えないと発見しにくいミスなんでほんと気をつけた方が良いと思います。
僕は1時間ぐらいハマってしまいました・・・。

ちなみに他の言語はどうなのか気になったので、試してみようと思います。
ということでJavaでやってみました。

public class Test {

	public static void main(String[] args) {

		boolean test = true;
		if ( test  == true ) {
			System.out.println("ok");
		}
		else {
			System.out.println("error");
		}


	}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
	トークン "Invalid Character" に構文エラーがあります。このトークンを削除してください
	トークン "Invalid Character" に構文エラーがあります。このトークンを削除してください

	at Test.main(Test.java:5)

予想通りエラーになりましたw

comments powered by Disqus