実は構文チェックエンジンを作成してまして、
文書中の"true"、"false"という文字列を、ブール型のTRUE、FALSEとして評価しなきゃいけない機会が発生しました。
ここで私は、settype関数を利用しました。
settype関数は第1引数の変数を第2引数で渡した型文字列で変換するというモノです。
settype(検査したい変数, 変換させたい型)
php:settype
変換に利用できる第2引数には以下が指定できます。
(この時、文字列で指定しなければならないので、クォートします。)
"boolean" or "bool"
"integer" or "int"
"float" or "double"
"string"
"array"
"object"
"null"
今回はブール型に変換したいので"boolean"を指定します。
ですが結果は以下のようになってしまいました。
$item_true = 'true';
$item_false= 'false';
settype($item_true, 'boolean');
settype($item_false, 'boolean');
var_dump($item_true); // boolean true と表示される
var_dump($item_false); // boolean true と表示される
ここで、"boolean" を "bool" に変更しても結果は同じ・・・
そしておかしさに気づいたのですが、上記の $item_true に適当な文字列を突っ込んでみても、boolean true に変換されてしまうのです。
これはと思って以下のように変更!
$item_true = '1';
$item_false= '0';
settype($item_true, 'boolean');
settype($item_false, 'boolean');
var_dump($item_true); // boolean true と表示される
var_dump($item_false); // boolean false と表示される
やっぱり!
phpのtrue、falseはdefine定義で1, 0を表しているようなもんだから、変換の時は、1,0を元に評価してしまうのですね。わかります。
元々の目的は構文チェックエンジンの作成なので、
そういうことだったら、以下の記述で十分
$item = 'true';
if($item == 'true' || $item == 'TRUE')
{
$result = true;
}
else
{
$result = false;
}
var_dump($result); // boolean true と表示される
0 コメント:
コメントを投稿