2011-06-20 102 views
2

<br />↵<b>Parse error</b>: syntax error, unexpected ':' in <b>.../ajax.php</b> on line <b>87</b>三元運算符在godaddy的PHP(parsererror)

87行不工作:$conditions = ($this->input->post()) ? : array('tutor'=>$this->session->userdata('user_id'));

線87項優良工程在本地主機上,但是當我使用GoDaddy的我得到這個錯誤。有什麼我需要在php.ini中設置或讓三元運算符工作?

謝謝!

回答

4

三元運算符(顧名思義)通常預計3個參數

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

隨着PHP5.3其允許省略$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 

然而,當你更換'處理功能,而不是變量,注意副作用:

$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()都只運行一次。