只是一个简单的问题 - 而且我确信它非常基本!
我有以下代码:
function checkThings($foo, $bar) {
...
if ($valid) {
return $results;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
另一方面,我目前正在做
$check = checkThings($foo, $bar);
if ($check === false) {
echo "Error";
} else {
echo $check;
}
Run Code Online (Sandbox Code Playgroud)
写下面的内容是一样的吗?
$check = checkThings($foo, $bar);
if (!$check) {
echo "Error";
} else {
echo $check;
}
Run Code Online (Sandbox Code Playgroud)
如果两者都正确,哪种方法是首选方法?
谢谢 :)
Chr*_*ker 50
三等运算符是类型敏感的.所以当你检查:
if ($check === false)
Run Code Online (Sandbox Code Playgroud)
...只有$check布尔值为"false" 才会成立.Wheras
if ($check == false)
Run Code Online (Sandbox Code Playgroud)
...不是专门检查布尔值false,而是"falsey"值.PHP中的False等于零,null为"falsey",为空字符串("" == false == null,但是"" !== false !== null).所以:
$check = 0;
if ($check == false)
Run Code Online (Sandbox Code Playgroud)
......评估为真.
该!前缀运算符相当于==.因此,当零需要是来自布尔值false的离散值时,!和==运算符是不够的.
查看比较运算符的文档:http://php.net/manual/en/language.operators.comparison.php
最佳做法是使您的条件检查尽可能具体.这不仅是为了避免您的逻辑中的潜在疏忽,而且还为未来的开发人员提供更易于维护的代码.想象一下遇到一行这样的代码:
if (check_something($variable)) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我可以假设check_something函数返回一个布尔值为true.但是,除非我去挖开check_something功能,它可能还可以返回一个非空字符串,数字...谁知道!这样做要清楚得多:
if (check_something($variable) === true) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
现在,仅仅通过观察,我知道该check_something函数应该返回一个真值.我可能不知道这个函数是做什么的,但至少它确切地说明它返回的是什么.您在其他地方看到的另一个常见示例:
if (!$_GET['value']) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这是一个宠儿.条件陈述应始终清楚地比较事物.所以,你想做:
if (array_key_exists('value', $_GET) !== false && $_GET['value'] === '1') {
// do something
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以告诉我,我不仅要检查查询字符串参数是否存在,还要查看它是否等于特定值.
总之,单!前缀运算符和==运算符很少有用,并且总是不明确的.最好的方法是以一种文档本身的方式编写代码,或者将其翻译成人类语言来表达逻辑.使用一个直接比较!==或===在适当情况下,是一个好习惯,好做法,并最有可能产生在你的代码意想不到的效果.
| 归档时间: |
|
| 查看次数: |
65252 次 |
| 最近记录: |