皆さんは三段論法という 絶対法則 をご存知だろうか?
【三段論法とは】
大前提(主に普遍的な法則)と小前提(個別の単なる事実)から結論を導き出す推論方法。
簡潔に説明すると以下のような論法である。AはBである。
↓
BはCである。
↓
よってAはCである。「A」と「C」という元々直接的には関係しない事柄を、両方と関連性のある「B」という事柄を用いて論理的に結びつけることができる。
三段論法の有名な例としては以下の文が挙げられる。ソクラテスは人間である。
↓
全ての人間は死すべきものである。
↓
ゆえにソクラテスは死すべきものである。上述の説明に当てはめると、「ソクラテス」はA、「人間」はB、「死すべきもの」はCに該当する。
「ソクラテスは人間である」という小前提と「全ての人間は死すべきものである」という大前提により、「ソクラテスは死すべきものである」という結論が導き出されたのである。
https://dic.nicovideo.jp/a/%E4%B8%89%E6%AE%B5%E8%AB%96%E6%B3%95 より引用
【PHPではどうか?】
まず以下のコードとその実行結果を見ていただきたい。
<?php
var_dump(NULL == 0);
var_dump(0 == "0");
$ php syllogism.php
bool(true)
bool(true)
なるほどなるほど。 NULL
== 0
が真。0
== "0"
が真。ならば三段論法的に、NULL
== "0"
も真だろう。
<?php
var_dump(NULL == 0);
var_dump(0 == "0");
var_dump(NULL == "0");
$ php syllogism.php
bool(true)
bool(true)
bool(false)
ファ!?
【補足】
- PHPに限らず、変数には値の他に型という性質を持っているため単純に三段論法で語ることはできません。
- 緩やかな比較をしていると、こういう落とし穴にハマる可能性があるので、厳密な比較をするようにしましょう。