的accepted answer是正確的,但錯過一個重要的一點:
$x = $a ? : $b; // valid in PHP 5.3
確實應該用
$x = $a ? $a : $b; // valid in older versions of PHP
然而,當你更換'處理功能,而不是變量,注意副作用:
$conditions = ($this->input->post())
? ($this->input->post())
: array('tutor'=>$this->session->userdata('user_id'));
在上述情況下,如果$this->input->post()
返回一個真值,函數將再次執行,這可能不是您想要的。您可以通過擴大三元運營商充分發揮其形式更加清楚地看到這一點:
if ($this->input->post()) {
$conditions = $this->input->post();
} else {
$conditions = array('tutor' => $this->session->userdata('user_id'));
}
你可以看到,功能上線的上方一個和 2執行。如果你不想這樣做,試試這個:
if (!$conditions = $this->input->post()) {
// Single equal sign in an if condition: make assignment, and check
// whether the result is truthy.
$conditions = array('tutor' => $this->session->userdata('user_id'));
}
這是我自己的代碼中一個相當常見的模式。這將只執行一次功能$this->input->post()
。如果結果是真的,那麼結果將存儲在$conditions
中。如果結果不是真的,則運行if
條件中的代碼。這會將故障預置值分配給$conditions
。好處是,無論哪種情況,$this->input->post()
都只運行一次。
哇謝謝!這比完全寫出if語句短得多。我想我只需要使用5.3之前的方法.. – mazlix