public function check($code, $id = '') { $key = $this->authcode($this->seKey).$id; // 驗證碼不可為空 $secode = session($key); if(empty($code) || empty($secode)) { return false; } // session 到期 if(NOW_TIME - $secode['verify_time'] > $this->expire) { session($key, null); return false; } if($this->authcode(strtoupper($code)) == $secode['verify_code']) { $this->reset && session($key, null);//這個地方為什麼用&&,而不是三元運算子? return true; } return false; }
我的理解是應該寫成這樣:
$this->reset ? session($key, null):1;
回複內容:
public function check($code, $id = '') { $key = $this->authcode($this->seKey).$id; // 驗證碼不可為空 $secode = session($key); if(empty($code) || empty($secode)) { return false; } // session 到期 if(NOW_TIME - $secode['verify_time'] > $this->expire) { session($key, null); return false; } if($this->authcode(strtoupper($code)) == $secode['verify_code']) { $this->reset && session($key, null);//這個地方為什麼用&&,而不是三元運算子? return true; } return false; }
我的理解是應該寫成這樣:
$this->reset ? session($key, null):1;
根據&&的執行規則,如果左邊返回true,則執行右邊操作,否則不執行右邊的操作。這樣寫既不會是二樓說的不規範,也不會是一樓說的用if代碼太多。
其實就是一個蹩腳的寫法,雖然執行結果和三元運算子一樣,沒一點好處
可讀性太差。
不贊同樓下的寫法,既然有三元運算子,為什麼還要用if?
一行代碼可以搞定的問題,為什麼要用3行?
你可以看做三元運演算法理解,但是即使你看成三元的,也是一種不規範的寫法。
其合理的寫法應該是
if ($this->reset) { session($key, null);}
贊同 @zj飛得更高 同學的答案。
不過實際上,推薦用and
和or
操作符,他們的優先順序更低,更適合進行語句的連結。
更主要的是可讀性不低啊,and是“就做...”,or是“否則做...”
一般稱作短路運算
用於替代簡化內容體只有一句的if語句.
不認為這是一種不規範的寫法,存在即合理,這個運算子的用法就是這樣的,只不過大多數用在條件判斷裡而已
記得在哪裡看到過這種寫法的效率是高於if的,沒實測過,雖然這種效能效率可忽略
有些時候if嵌套的很多,但裡面的內容卻只有一句,用這個或者三目運算可讀性反而會好點