2011-09-13 57 views
0

可能是一個的n00b問題,但看看下面的代碼:PHP if語句自動運行

function admin_delete ($id) 
{ 

    if ($this->User->delete($id)) 
    { 
     $this->Session->setFlash('The user with id: ' . $id . ' has been deleted!'); 
     $this->redirect(array('controller' => 'users', 'action' => 'admin_index')); 
    } 
} 

現在就我而言,這將加載admin_delete視圖,然後當用戶刪除用戶它執行if語句中的內容。但它直接刪除?爲什麼?因爲它只是檢查刪除是否已經發生,並且它們在方法中沒有什麼可以說實際刪除它。那麼,爲什麼代碼中的if語句裏面就像是自動運行的,如果沒有條件表達式返回true或功能刪除被稱爲if語句之外:/

乾杯

+0

顯然'$這個 - >用戶 - >刪除($ ID)'是返回true ... PHP不只是去條件裏面,因爲感覺它。試着把一個'死('我在這裏死?');'作爲條件的第一行來看看這個特定的條件是否會導致問題(我以前發生過這種情況,完全錯誤的代碼段)。 – animuson

+0

你需要一個單獨的控制器來進行實際刪除。 –

+0

更好的是:'$ test = $ this-> User-> delete($ id); var_dump($ test);''會告訴你'$ this-> user-> delete($ id)'實際上是否返回true。 – Herbert

回答

3

好吧,讓我們來看看如何你的if語句被構造。

if ($this->User->delete($id)) 

你基本上是這樣說的,「如果調用函數delete返回true,那麼運行這個其他代碼」。爲了看它是否返回true,它需要調用該函數。實質上,由於這不是一個複合布爾表達式,因此您的函數調用將始終進行評估。

+0

啊,好吧,現在對我有意義。謝謝 ;) – Cameron