ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

===演算子と!===演算子

PHPは0とfalseが同義でハマる事が多数だとか、これを回避する為に新しい演算子が出来たけどイケてない、とか思っている人は結構いるようですが。
だったら意味を逆にしちゃえばいいんじゃね、とか思ってみた。そんな訳で。

--- php-5.2.5,orig/Zend/zend_language_scanner.l	2007-09-10 01:33:34.000000000 +0900
+++ php-5.2.5/Zend/zend_language_scanner.l	2008-02-01 12:05:17.000000000 +0900
@@ -1267,19 +1267,19 @@
 }
 
 <ST_IN_SCRIPTING>"===" {
-	return T_IS_IDENTICAL;
+	return T_IS_EQUAL;
 }
 
 <ST_IN_SCRIPTING>"!==" {
-	return T_IS_NOT_IDENTICAL;
+	return T_IS_NOT_EQUAL;
 }
 
 <ST_IN_SCRIPTING>"==" {
-	return T_IS_EQUAL;
+	return T_IS_IDENTICAL;
 }
 
 <ST_IN_SCRIPTING>"!="|"<>" {
-	return T_IS_NOT_EQUAL;
+	return T_IS_NOT_IDENTICAL;
 }
 
 <ST_IN_SCRIPTING>"<=" {

これを適用すると「===」と「==(と<>)」の意味が逆になり、「!==」と「!=」の意味が逆になります。

% cat ./equal.php
<?php

echo "--------------------".PHP_EOL;
var_dump( 1 == 1 );
var_dump( 1 == "1" );
var_dump( 1 == true );

echo "--------------------".PHP_EOL;
var_dump( 1 === 1 );
var_dump( 1 === "1" );
var_dump( 1 === true );

echo "--------------------".PHP_EOL;
var_dump( 0 != 0 );
var_dump( 0 != "0" );
var_dump( 0 != false );

echo "--------------------".PHP_EOL;
var_dump( 0 !== 0 );
var_dump( 0 !== "0" );
var_dump( 0 !== false );

?>

% php-5.2.5,orig/sapi/cli/php ./equal.php
--------------------
bool(true)
bool(true)
bool(true)
--------------------
bool(true)
bool(false)
bool(false)
--------------------
bool(false)
bool(false)
bool(false)
--------------------
bool(false)
bool(true)
bool(true)

% php-5.2.5/sapi/cli/php ./equal.php
--------------------
bool(true)
bool(false)
bool(false)
--------------------
bool(true)
bool(true)
bool(true)
--------------------
bool(false)
bool(true)
bool(true)
--------------------
bool(false)
bool(false)
bool(false)

ほらね。簡単。って、こういう事じゃない?そりゃ失礼しました。
個人的にはコレが原因でハマった事って、そんなに無いけどなぁ。。。ウザいと思った事は結構あるけど(特に忙しい時トカ)。
よくよく考えたら演算子だけ意味を変えても効果は少ない気がするねぇ。。。どうしたものか。
っていうか、やっぱりガンダム・ネタはツボ。(w
それで攻めてこないでぇ。やっぱりシャアは偉大ですね。