有一个有趣的问题。在一些遗留代码中,我们有以下陈述。
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的值。
答案 0 :(得分:1)
empty()
会返回true
错误必须在于php的棘手类型杂耍。可能是$result['email_address']
或$result['mobile_numer']
包含__toString
实现返回空字符串的对象。 emtpy
会看到一个对象,而== ''
会看到一个空字符串。
但可能还有其他几十起案件。因此,最好的办法是摆脱逻辑重复(if语句),并在TokenFinder
中实现静态方法,如isDataValid
,并用它来检查类外的数组。
答案 1 :(得分:-1)
PHP手册:
empty()如果var存在且非空,则返回FALSE非零 值。否则返回TRUE。