3状態の真偽値

PHP+PostgreSQLの開発で、3状態のboolean*1を表現しようとして詰まった。変数を「false」に設定してしまうと、どうも「null」と区別が付かない感じなのである。一応、「null」は特別な値として「false」とは異なるはずなんだがなぁ…。(nullをbooleanとして判定するとfalseになるけど。)たぶん、判定用の関数is_nullの動作に何か問題があるんだと思うが、マニュアルには載っていなかった。



仕方がないので文字列で「t」「f」を入れて「null」と区別が付くようにしたのだが…これをするとif文の条件節に変数をそのまま放り込んだときにどちらも「true」と判定される*2ので間違いの元なんだよねぇ。



PHPはemptyの判定も妙な癖があるので困ったりする。(文字列「0」がemptyと判定される、とか…)

*1:通常、booleanは真か偽かの2状態なのだが、データベースなどでは「未設定」を入れて3状態にすることが割とある。

*2:文字列がfalseと判定されるのは空文字列の時だけだから。変数=='t'で判定する必要がある。