2010-11-15 76 views
1

我正在寫一些簡單的PHP來備份一個微型網站。在我的控制,我有一個快速安全/合理性檢查如何停止執行當前的PHP腳本?

if(!preg_match('/^[a-z]$/i', $req)) { gohome(); } 

我想繼續我的主代碼後,這一點,但爲了美觀,我想,以避免把它的其餘部分的else內塊。最好的解決辦法是什麼?我可以考慮設置一個相當簡單的包裝來處理認證和安全邏輯,但是我覺得我只是在我的培訓中錯過了一個非常簡單的解決方案。

回答

9

您可以使用die/exit函數來結束腳本(有或沒有)錯誤。

+0

這似乎對我的簡單需求很好。我想象我會使用類似Phil Brown在下面所建議的那樣,使用Exception,並將控制器包含在稍微複雜的實現中的try塊中。 – 2010-11-15 00:52:45

+4

@Steven請注意,'exit'會停止整個PHP進程。從那時起,沒有其他代碼可以運行。正如你的問題暗示這是MVC應用程序中控制器操作的一部分,我懷疑這是所期望的行爲。 – Phil 2010-11-15 01:03:06

+0

非常好的一點,MVC環境中的「理想」方式可能會在所有控制器,模型和視圖調用中包含異常處理。 – 2010-11-21 21:26:43

2

如果這是一個函數,通常可以提前返回。

3

你可以

return gohome(); 

throw new Exception('Request may only contain letters'); 

要麼將​​停止特定腳本在該點執行。

1

退出()是終止當前腳本一個不錯的辦法......

if(!preg_match('/^[a-z]$/i', $req)) { gohome(); exit() } 

我寧願保持在主流exit()/die()電話。或者如Phil所示,扔出Exception並退出()在堆棧中較低的地方

2

請嘗試以下操作。

preg_match('/^[a-z]$/i', $req) or die("exit message here, if you'd like"); 

這是沒有更好的功能比Xavier的,但我只是喜歡的「這樣做或死」 :)語法/想法也是種讓我想起那些老的任天堂遊戲滑板或者死滑雪或死亡。

+0

+1,用於將復古遊戲加入到等式中。 – 2013-04-05 01:26:33

0

你可以很簡單地寫出來;

return; 

該命令將程序控制權返回給調用腳本,所以;

  • 如果線性代碼包含在PHP文件中,控件將返回到調用該文件運行的腳本。
  • 如果在一個函數(或對象方法)中函數將立即返回參數(如果提供的話),如果沒有提供,則返回null
  • 它不會完全停止腳本的運行(您需要使用exitdie),除非沒有調用腳本。

所以在你的情況下,

if(!preg_match('/^[a-z]$/i', $req)) 
{ 
    gohome(); 
    return; 
} 

並且else塊不是必需的,因爲如果條件返回false,它將只會繼續腳本。