PHPの処理系で分からない部分があったので確かめる処理を書いてみました。特に”0x0A”と”10″を単純に文字比較すると等しいと判定されるので注意が必要です。
実行環境はWindows7 PHP5.3.5です。
PHPのソース(SHIFT-JIS)
<?php
echo '"0x0A" == "10"'." => ".var_export("0x0A" == "10", true).PHP_EOL;
echo '"0x0A" === "10"'." => ".var_export("0x0A" === "10", true).PHP_EOL;
echo '"0x0A" == 10'." => ".var_export("0x0A" == 10, true).PHP_EOL;
echo '"0x0A" === 10'." => ".var_export("0x0A" === 10, true).PHP_EOL;
echo '10 == "10"'." => ".var_export(10 == "10", true).PHP_EOL;
echo '10 === "10"'." => ".var_export(10 === "10", true).PHP_EOL;
echo '10 == "a"'." => ".var_export(10 == "a", true).PHP_EOL;
echo '10 === "a"'." => ".var_export(10 === "a", true).PHP_EOL;
echo '"00" == "0"'." => ".var_export("00" == "0", true).PHP_EOL;
echo '"-0" == "00000"'." => ".var_export("-0" == "00000", true).PHP_EOL;
echo '"00" === "0"'." => ".var_export("00" === "0", true).PHP_EOL;
echo '"-0" === "00000"'." => ".var_export("-0" === "00000", true).PHP_EOL;
echo 'false == 0'." => ".var_export(false == 0, true).PHP_EOL;
echo 'NULL == 0'." => ".var_export(NUll == 0, true).PHP_EOL;
echo 'false === 0'." => ".var_export(false === 0, true).PHP_EOL;
echo 'NULL === 0'." => ".var_export(NUll === 0, true).PHP_EOL;
echo 'NULL == false'." => ".var_export(NUll == false, true).PHP_EOL;
echo 'NULL === false'." => ".var_export(NUll === false, true).PHP_EOL;
echo '$bool = false'.PHP_EOL;($bool = false);
echo 'isset($bool)'." => ".var_export(isset($bool), true).PHP_EOL;
echo '$bool = NULL'.PHP_EOL;($bool = NULL);
echo 'isset($bool)'." => ".var_export(isset($bool), true).PHP_EOL;
echo '$bool = 0'.PHP_EOL;($bool = 0);
echo 'isset($bool)'." => ".var_export(isset($bool), true).PHP_EOL;
echo PHP_EOL;
echo 'is_int(10)'." => ".var_export(is_int(10), true).PHP_EOL;
echo 'is_int("10")'." => ".var_export(is_int("10"), true).PHP_EOL;
echo 'is_string("10")'." => ".var_export(is_string("10"), true).PHP_EOL;
echo 'is_int(true)'." => ".var_export(is_int(true), true).PHP_EOL;
echo 'is_int(false)'." => ".var_export(is_int(false), true).PHP_EOL;
echo 'is_int("true")'." => ".var_export(is_int("true"), true).PHP_EOL;
echo 'is_int("false")'." => ".var_export(is_int("false"), true).PHP_EOL;
echo 'is_string(true)'." => ".var_export(is_string(true), true).PHP_EOL;
echo 'is_string(false)'." => ".var_export(is_string(false), true).PHP_EOL;
echo 'is_string("true")'." => ".var_export(is_string("true"), true).PHP_EOL;
echo 'is_string("false")'." => ".var_export(is_string("false"), true).PHP_EOL;
echo 'is_bool(true)'." => ".var_export(is_bool(true), true).PHP_EOL;
echo 'is_bool(false)'." => ".var_export(is_bool(false), true).PHP_EOL;
echo 'is_bool("true")'." => ".var_export(is_bool("true"), true).PHP_EOL;
echo 'is_bool("false")'." => ".var_export(is_bool("false"), true).PHP_EOL;
echo 'is_bool(0)'." => ".var_export(is_bool(0), true).PHP_EOL;
echo 'is_bool(1)'." => ".var_export(is_bool(1), true).PHP_EOL;
echo PHP_EOL;
echo '@is_int(A)'." => ".var_export(@is_int(A), true).PHP_EOL;
echo '@is_string(A)'." => ".var_export(@is_string(A), true).PHP_EOL;
echo PHP_EOL;
$str = '
$var = NULL;
if($var) $res = true;
else $res = false;
return $res;';
echo $str." => ".var_export(eval($str), true).PHP_EOL;
$str = '
$var = 0;
if($var) $res = true;
else $res = false;
return $res;';
echo $str." => ".var_export(eval($str), true).PHP_EOL;
$str = '
$var = 1;
if($var) $res = true;
else $res = false;
return $res;';
echo $str." => ".var_export(eval($str), true).PHP_EOL;
$str = '
$var = -1;
if($var) $res = true;
else $res = false;
return $res;';
echo $str." => ".var_export(eval($str), true).PHP_EOL;
$str = '
$var = "";
if($var) $res = true;
else $res = false;
return $res;';
echo $str." => ".var_export(eval($str), true).PHP_EOL;
$str = '
$var = array();
if($var) $res = true;
else $res = false;
return $res;';
echo $str." => ".var_export(eval($str), true).PHP_EOL;
$str = '
$var = array(1);
if($var) $res = true;
else $res = false;
return $res;';
echo $str." => ".var_export(eval($str), true).PHP_EOL;
echo PHP_EOL;
echo 'strlen("あいう")'." => ".var_export(strlen("あいう"), true).PHP_EOL;
echo 'mb_strlen("あいう")'." => ".var_export(mb_strlen("あいう"), true).PHP_EOL;
echo PHP_EOL;
echo 'mb_language("Japanese");'.PHP_EOL;
mb_language("Japanese");
echo 'strlen("あいう")'." => ".var_export(strlen("あいう"), true).PHP_EOL;
echo 'mb_strlen("あいう")'." => ".var_export(mb_strlen("あいう"), true).PHP_EOL;
echo PHP_EOL;
echo 'mb_internal_encoding("SHIFT-JIS");'.PHP_EOL;
mb_internal_encoding("SHIFT-JIS");
echo 'strlen("あいう")'." => ".var_export(strlen("あいう"), true).PHP_EOL;
echo 'mb_strlen("あいう")'." => ".var_export(mb_strlen("あいう"), true).PHP_EOL;
echo PHP_EOL;
echo '$str = "abc"'.PHP_EOL;$str = "abc";
echo '$str{0}'." => ".var_export($str{0}, true).PHP_EOL;
echo '$str = "あいう"'.PHP_EOL;$str = "あいう";
echo '$str{0}'." => ".var_export($str{0}, true).PHP_EOL;
echo PHP_EOL;
$str = "abcd";
echo 'unpack("C*", "'.$str.'") => '.var_export(unpack("C*", $str), true).PHP_EOL;
echo PHP_EOL;
echo 'pack("C*", 97, 98, 99, 100) => '.var_export(pack("C*", 97, 98, 99, 100), true).PHP_EOL;
echo PHP_EOL;
echo 'pack("C*", 97, 98, 0, 99, 100) => '.var_export(pack("C*", 97, 98, 0, 99, 100), true).PHP_EOL;
echo PHP_EOL;
$str = pack("C*", 97, 98, 0, 99, 100);
echo '$str = pack("C*", 97, 98, 0, 99, 100)'.PHP_EOL;
echo 'is_string($str) => '.var_export(is_string($str), true).PHP_EOL;
echo 'strlen($str) => '.var_export(strlen($str), true).PHP_EOL;
echo 'mb_strlen($str) => '.var_export(mb_strlen($str), true).PHP_EOL;
echo 'strstr($str, "\0") => '.var_export(strstr($str, "\0"), true).PHP_EOL;
echo 'unpack("C*", $str) => '.var_export(unpack("C*", $str), true).PHP_EOL;
echo 'str_replace("\0", "-", $str) => '.var_export(str_replace("\0", "-", $str), true).PHP_EOL;
実行結果
"0x0A" == "10" => true
"0x0A" === "10" => false
"0x0A" == 10 => true
"0x0A" === 10 => false
10 == "10" => true
10 === "10" => false
10 == "a" => false
10 === "a" => false
"00" == "0" => true
"-0" == "00000" => true
"00" === "0" => false
"-0" === "00000" => false
false == 0 => true
NULL == 0 => true
false === 0 => false
NULL === 0 => false
NULL == false => true
NULL === false => false
$bool = false
isset($bool) => true
$bool = NULL
isset($bool) => false
$bool = 0
isset($bool) => true
is_int(10) => true
is_int("10") => false
is_string("10") => true
is_int(true) => false
is_int(false) => false
is_int("true") => false
is_int("false") => false
is_string(true) => false
is_string(false) => false
is_string("true") => true
is_string("false") => true
is_bool(true) => true
is_bool(false) => true
is_bool("true") => false
is_bool("false") => false
is_bool(0) => false
is_bool(1) => false
@is_int(A) => false
@is_string(A) => true
$var = NULL;
if($var) $res = true;
else $res = false;
return $res; => false
$var = 0;
if($var) $res = true;
else $res = false;
return $res; => false
$var = 1;
if($var) $res = true;
else $res = false;
return $res; => true
$var = -1;
if($var) $res = true;
else $res = false;
return $res; => true
$var = "";
if($var) $res = true;
else $res = false;
return $res; => false
$var = array();
if($var) $res = true;
else $res = false;
return $res; => false
$var = array(1);
if($var) $res = true;
else $res = false;
return $res; => true
strlen("あいう") => 6
mb_strlen("あいう") => 6
mb_language("Japanese");
strlen("あいう") => 6
mb_strlen("あいう") => 6
mb_internal_encoding("SHIFT-JIS");
strlen("あいう") => 6
mb_strlen("あいう") => 3
$str = "abc"
$str{0} => 'a'
$str = "あいう"
$str{0} => '・
unpack("C*", "abcd") => array (
1 => 97,
2 => 98,
3 => 99,
4 => 100,
)
pack("C*", 97, 98, 99, 100) => 'abcd'
pack("C*", 97, 98, 0, 99, 100) => 'ab' . "\0" . 'cd'
$str = pack("C*", 97, 98, 0, 99, 100)
is_string($str) => true
strlen($str) => 5
mb_strlen($str) => 5
strstr($str, "\0") => '' . "\0" . 'cd'
unpack("C*", $str) => array (
1 => 97,
2 => 98,
3 => 0,
4 => 99,
5 => 100,
)
str_replace("\0", "-", $str) => 'ab-cd'
最新コメント