2010-11-15 71 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,它将只会继续脚本。