要使用示例,是$name == "John Doe"
还是$name === "John Doe"
?
我猜测平等比较会表现得更差,因为他们会进行某种类型的投射。
P.S。我知道选择一个相对于另一个的性能增益可以忽略不计,如果有的话。这是一个原则问题。
答案 0 :(得分:3)
在大多数代码中,你真的不需要检查===,如果你仔细考虑到你没有使用强类型语言的事实,但是当你编写PHP时这应该是一个不变的想法代码。
我通常使用==,保留===到PHP手册建议的内容(即strpos()调用和similars)。
这是我运行的一些实证基准。也许我应该切换到===; - )
$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
答案 1 :(得分:1)
我总是选择最有效的,在前提下我可以防止在将来未发现的更改期间发生某些逻辑错误。我还没有对这个程序感到难过。
答案 2 :(得分:0)
===
也会检查type
。这是比较运算符的manual。
如评论中所述,我编辑了我的答案,
当您不知道比较的值的类型时,使用 ==
,例如。带有数字的字符串 - if($str == $num)
,其中$ str ='5'和$ num = 5.当您想要比较它们的类型(严格)时,使用===
。多年来,我了解到使用===
更好,因为在大多数情况下作为程序员,你确实知道你要比较的类型,从长远来看,严格的编程实践总是更好(更高效,减少错误。)
答案 3 :(得分:0)
我认为这取决于需要。
$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
答案 4 :(得分:0)
除非您正在检查
的值你很高兴与平等运算符本身一起使用。但是,如果你不想被所有这些可能性所困扰,我相信使用严格的相等运算符将是一个更好的选择。
$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;
}
}
检查输出的第二个块中的前两行:
'1234'=='01234' - &gt; 真
'1234'==='01234' - &gt; 假