举个例子,应该是$name == "John Doe"
还是$name === "John Doe"
?
我猜想相等比较的表现会更差,因为它们会进行某种类型转换。
ps 我知道选择一个而不是另一个的性能增益可以忽略不计,如果有的话。这是一个原则问题。
举个例子,应该是$name == "John Doe"
还是$name === "John Doe"
?
我猜想相等比较的表现会更差,因为它们会进行某种类型转换。
ps 我知道选择一个而不是另一个的性能增益可以忽略不计,如果有的话。这是一个原则问题。
如果您仔细接受您没有使用强类型语言的事实,那么您实际上不需要在大多数代码中检查 === ,但是当您编写 PHP 代码时,这应该是一个不变的想法。
我通常使用 ==,将 === 保留为 PHP 手册建议的内容(即 strpos() 调用和类似调用)。
这是我运行的一些经验基准。也许我应该切换到 === ;-)
$start = microtime(true);
for($i = 0; $i < 1000000; $i++) {
if("1" === 1);
}
$end = microtime(true);
echo number_format($end - $start,5,',','.') . " seconds";
// 0,06117 seconds for "thestring" === "thestring"
// 0,07601 seconds for "thestring" == "thestring"
// 0,05154 seconds for "1" === 1
// 0,09041 seconds for "1" == 1
我总是选择最严格的,前提是我可以防止在未来的变化中出现一些逻辑错误,否则这些错误不会被发现。我还没有对那个程序感到难过。
===
type
除了平等之外,还检查。这是比较运算符的手册。
正如评论中提到的,我编辑了我的答案,
==
当您不知道比较值的类型时使用,例如。带数字的字符串 --if($str == $num)
其中 $str = '5' 和 $num = 5。当您还想比较它们的类型时(严格),您可以使用===
. 多年来,我了解到使用===
更好,在大多数情况下,作为程序员,您确实知道要比较的类型,从长远来看,严格的编程实践总是更好(效率更高,错误更少)。
除非您正在检查一个值
您最好使用相等运算符本身。但是,如果您不想被所有这些可能性所困扰,我相信使用严格的相等运算符将是一个更好的选择。
$check = array(
array(
'check' => array('01234','1234',01234,1234),
'against' => array('01234',1234,01234)
),
array(
'check' => array(0,'0',FALSE,NULL,'',array()),
'against' => array(FALSE,'')
),
array(
'check' => array(1,'1',TRUE,'ab',array('a')),
'against' => array(TRUE,1,'ab')
)
);
function var2Str($var) {
if (is_string($var)) return "'$var'";
elseif (is_bool($var)) return $var ? 'TRUE' : 'FALSE';
elseif (is_null($var)) return 'NULL';
elseif (is_array($var)) return 'array('.implode(',',$var).')';
return $var;
}
foreach ($check as $arr) {
foreach ($arr['check'] as $ch) {
$chStr = var2Str($ch);
foreach ($arr['against'] as $ag) {
$e1 = $ch == $ag ? 'true' : 'false';
$e2 = $ch === $ag ? 'true' : 'false';
echo "$chStr\t==\t" . var2Str($ag) . "\t--> <b>$e1</b>" . PHP_EOL;
echo "$chStr\t===\t" . var2Str($ag) . "\t--> <b>$e2</b>" . PHP_EOL;
}
echo PHP_EOL;
}
}
检查输出的第二个块中的前 2 行:
'1234' == '01234' -->真
'1234' === '01234' -->假
我认为这取决于需要。
$s = '0';
echo $s == '' ? 1 : 0; // false
$s = 0;
echo $s == '' ? 1 : 0; // true
echo $s === '' ? 1 : 0; // false
echo $s == false ? 1 : 0; // true
echo $s === false ? 1 : 0; // false
但在你的情况下,我想这些行都一样没关系。
$name = 'John Doe';
echo $name == 'John Doe' ? 1 : 0; // true
echo $name === 'John Doe' ? 1 : 0; // true