【发布时间】:2017-02-09 09:21:25
【问题描述】:
遇到了一个有趣的问题。在一些遗留代码中,我们有以下语句。
if (empty($result['email_address']) && empty($result['mobile_number'])) {
$token = '';
} else {
$tokenFinder = new TokenFinder();
$tokenFinder->setEmailAddress($result['email_address']);
$tokenFinder->setMobileNumber($result['mobile_number']);
$token = $tokenFinder->generate();
}
令牌查找器的相关位如下所示:
class TokenFinder{
public function setEmailAddress($email) {
$this->email = $email;
}
public function setMobileNumber($mobile) {
$this->mobile = $mobile;
}
public function generate(){
if ($this->email == '' && $this->mobile == ''){
Throw new Exception('TokenFinder: You cannot fetch a token with no email or mobile number');
}
昨天,有史以来第一次,generate() 方法中的异常被触发。我已经通过这段代码运行了失败消息中的所有收件人,并且没有触发异常。自抛出异常以来,数据没有改变。这是一个奇怪的。
有谁知道会导致 empty($var) 评估为 false 和 $var == '' 评估为 true 的任何值。
【问题讨论】:
-
这样的问题是很好的例子,为什么在 PHP 和 JavaScript 等语言中使用
===而不是==总是更好,以确保您检查严格相等。 -
我试过这个。 $a=数组(); var_dump(空($a)); o/p 是布尔值(真)。并且 $a=='' 是假的。因此,您的输入可能需要在检查之前进行修剪和过滤。
标签: php