accepted answerが正しいですが、一つの重要なポイントを逃す:とき
$x = $a ? : $b; // valid in PHP 5.3
は確かに、しかし
$x = $a ? $a : $b; // valid in older versions of PHP
に置き換える必要があり、デフォルト値を設定し
変数ではなく関数を扱っているので、副作用に気づくでしょう:
$this->input->post()
が真理値を返す場合、関数は再度実行されます。これはあなたが望むものではない可能性があります。あなたは、その完全な形に三項演算子を拡張することにより、より明確にこれを見ることができます:
if ($this->input->post()) {
$conditions = $this->input->post();
} else {
$conditions = array('tutor' => $this->session->userdata('user_id'));
}
あなたは関数がライン上で1 と 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()
が1回だけ実行されます。結果が真実であれば、その結果は$conditions
に格納されます。結果が真実でない場合は、if
のコードが実行されます。これにより、フォールバック値が$conditions
に割り当てられます。利点は、どちらの場合も、$this->input->post()
が1回だけ実行されることです。
うわー、ありがとう! if文を完全に書くよりもずっと短いです。私はちょうど5.3より前の方法を使用しなければならないと思う。 – mazlix