有一個有趣的問題。在一些遺留代碼中,我們有以下語句。
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()
方法異常被觸發。我通過這段代碼運行了失敗消息中的所有收件人,並且異常不會觸發。自拋出Exception以來數據沒有改變。這是一個奇怪的。
有誰知道任何會導致empty($var)
評估爲false的值,並且$var == ''
將評估爲true。
http://stackoverflow.com/questions/25100890/in-php-why-empty0-returns-true – fizzi
這樣的問題很好的例子,爲什麼總是使用'==='而不是'=='像PHP和JavaScript等語言,以確保您檢查嚴格的平等。 – Simba
可能重複[在PHP中,爲什麼空(「0」)返回true?](http://stackoverflow.com/questions/25100890/in-php-why-empty0-returns-true) – DarkBee