2011-06-20 19 views
2

<br />↵<b>Parse error</b>: syntax error, unexpected ':' in <b>.../ajax.php</b> on line <b>87</b>三項演算子は、GoDaddyはPHP(parsererror)

LINE 87で動作していない:$conditions = ($this->input->post()) ? : array('tutor'=>$this->session->userdata('user_id'));

ラインローカルホスト上の87点の作品の罰金が、私はGoDaddyは使用したとき、私はそのエラーを取得します。 php.iniやTernaryの演算子を動作させるために何か設定する必要はありますか?

ありがとうございます! (名前が示すように)

答えて

4

三項演算子は、通常は期待し3つの引数PHP5.3で

$var = $expr ? $trueValue : $falseValue; 

その$trueValueを省略することができました。その$exprがそれ

$var = $expr ? : $falseValue; 
// same as 
$var = $expr ? $expr : $falseValue; 

のために使用されている。この場合、あなたはおそらく、あなたのサーバー上でPHP5.3を持っていません。あなたは私の例でわかるように、その非常に簡単にこれを修正し、前の5.3

$conditions = ($this->input->post()) 
      ? ($this->input->post()) 
      : array('tutor'=>$this->session->userdata('user_id')); 
+0

うわー、ありがとう! if文を完全に書くよりもずっと短いです。私はちょうど5.3より前の方法を使用しなければならないと思う。 – mazlix

0

構文? :使用しているため、それができるようにするまでにPHP 5.3のみです。

$conditions = ($this->input->post()) ? $this->input->post() : array('tutor'=>$this->session->userdata('user_id')); 
0

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回だけ実行されることです。