2010-09-22 28 views
3

我使用CakePHP的,但是這是一個MVC/PHP的疑問PHP中使用的exit()

letting the view display the message 

VS

echo 'Invalid Data'; exit; 

我想知道的是,在第二種情況下,如內存有什麼陷阱泄漏等。其中一個是更好

編輯

萬一ajax電話的退出是好的。以及內存泄漏和其他問題。是否所有變量都已釋放

回答

6

如果遇到任何錯誤(CakePHP應該已經提供了ExceptionHandler),您應該使用自定義的ExceptionHandler(set_error_handler/set_exception_handler)並拋出Exception。在視圖中留出一些空間,如果ExceptionHandler/ErrorHandler有消息,請在該處顯示以讓用戶知道。

你的第二個代碼只會產生含有小文一個空白頁。如果您在通常的頁面佈局中顯示消息,而不是生成空白頁面(這對大多數人來說看起來很糟糕),每個用戶都會很感激。

+0

+1刪除我的回答贊成你的,因爲你的是幾秒鐘的第一次,我的答案沒有添加任何顯着新的。 – Gordon 2010-09-22 10:02:58

0

一般情況下,你應該避免exitExit異常終止,而且程序不應對異常終止。即使發生錯誤,仍然有許多事情需要完成 - 清理,日誌記錄,通知用戶等。畢竟,每次無法打開文件時,操作系統都不會重新啓動。

+2

這並不正常。異常終止將是一個致命錯誤或未捕獲的異常。(我發現你可以做退出(「無效數據」) - http://php.net/exit終止腳本+打印錯誤信息,我現在很害怕。) – halfdan 2010-09-22 09:37:47

+3

-1 for abnormal and insinuating使用退出時無法完成清理。 Exit使用Shutdown函數和對象析構函數終止腳本。 – Gordon 2010-09-22 09:39:38

+2

如果應用程序需要'cleanup()',則可以執行'register_shutdown_function(array($ obj,'cleanup')''這樣就不是參數 – Gordon 2010-09-22 09:55:49

0

性能明智(AJAX CALS)

使用exit()


用戶體驗明智(標準場地NAV)

顯示錯誤在適當的格式化網頁保持用戶的網站內。

+1

爲什麼在AJAX調用中使用exit()?他應該返回一個JSON字符串包含一個很好的錯誤信息在客戶端顯示 – halfdan 2010-09-22 10:02:23

+2

在ajax調用時使用exit,當惡意類型以非ajax方式調用你的ajax頁面時,與在錯誤發生後應該停止執行的普通頁面相同。 – 2010-09-22 10:20:51

+0

@halfdan我對AJAX上的exit()的想法與Matt的類似,另外,當用戶詢問Cake中哪些更有效時,停止和移動會比讓Cake完美地完成更有效率。 – Frankie 2010-09-22 10:51:40

3

蛋糕工具信號誤差用戶是會議消息和錯誤的觀點。

對於喜歡視圖操作「被動」的行動,你應該拋出一個404或類似的,可能更專業的錯誤,例如如果請求的型號不存在:

function view($id) { 
    $data = $this->Model->read(null, $id); 
    if (!$data) { 
     $this->cakeError('error404'); 
    } 

    ... 
} 

請參閱Error Handling with CakePHP

對於任何POST操作,應使用戶返回到視圖,並顯示使用$this->Session->setFlash('Error!')和相應的錯誤消息爲每個無效的表單字段的錯誤消息。這是烘焙視圖和控制器的默認行爲。

exit終止整個腳本會造成不愉快的用戶體驗。