有替代死吗?

时间:2011-01-15 02:49:39

标签: php

很抱歉这个引人注目的标题,只是想知道是否有办法防止所有类型的PHP命令执行除了一个。

例如,现在当我使用die()终止脚本时,我的页面看起来有一半被破坏,因为页面的html底部部分无法加载,因为它是使用include()函数引入的。

那么有没有办法告诉PHP“除了include函数之外不再允许执行任何命令”?

6 个答案:

答案 0 :(得分:12)

您可以使用return“终止”包含的文件,而不会删除整个脚本:

test1.php

<?php
include 'test2.php';
echo 'foo';

test2.php

<?php
echo 'bar';
return;
echo 'baz';

输出:

barfoo

答案 1 :(得分:2)

您将需要使用自定义die()命令(例如my_die())来包含所需的文件。你不能覆盖die(),任何其他函数也不能让你做你想要的。

答案 2 :(得分:1)

exit()将停止执行,并运行任何已注册的退出处理程序。

抛出异常会升到周围尝试的任何地方。如果没有尝试到顶级,它将终止脚本的所有执行。

全局范围内的返回将返回当前包含文件,返回到包含/要求文件的任何内容。

就个人而言,我建议采用经过深思熟虑的异常处理方法,并使用try / throw。

答案 3 :(得分:0)

你有什么理由不能这样做吗?

if(something didn't work) {
  include('footer.php');
  die();
}

如果您经常使用它,请将其变成一个功能。

function finish_and_die($message) {
  print $message;
  include('footer.php');
  exit;
}

答案 4 :(得分:0)

您可以尝试以下方式:

if( is_secure($_GET['value']) ) // Whatever you're using to check if the value is allowed
{
    // Page content goes here
}

这样,所有其他包含和页面处理代码仍然会被调用。

或者,如果它无效,则抛出异常,并拥有一个知道如何完成页面代码的异常处理程序。

答案 5 :(得分:-1)

如果您使用OOP方法结合输出缓冲,这就是您解决问题的方法:

Controller类(逻辑所在的位置)有一个成员,它是Template类的一个实例。 Controller类有一个__destruct方法,用于呈现模板

调用exit()die()时,调用Controller对象的__destruct方法,后者又调用Template对象的render方法。