Php 有没有别的选择?

Php 有没有别的选择?,php,Php,对于这个听起来很戏剧性的标题,我很抱歉,我只是想知道是否有一种方法可以阻止除一个以外的所有类型的PHP命令执行 例如,现在当我使用die()杀死一个脚本时,我的页面看起来有一半被破坏了,因为页面的html底部无法加载,因为它是使用include()函数引入的 function finish_and_die($message) { print $message; include('footer.php'); exit; } 那么,有没有一种方法可以告诉PHP“除了include函数之

对于这个听起来很戏剧性的标题,我很抱歉,我只是想知道是否有一种方法可以阻止除一个以外的所有类型的PHP命令执行

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

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

那么,有没有一种方法可以告诉PHP“除了include函数之外,不允许执行更多的命令”?

有什么理由不能这样做吗

if(something didn't work) {
  include('footer.php');
  die();
}
如果你经常使用它,把它变成一个函数

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

您需要使用自定义die()命令,例如my_die()来包含所需的文件。您不能重写die(),任何其他函数也不允许您执行所需操作。

您可以尝试以下操作:

if( is_secure($_GET['value']) ) // Whatever you're using to check if the value is allowed
{
    // Page content goes here
}
这样,所有其他include和页面处理代码仍将被调用


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

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

test1.php

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

如果使用OOP方法并结合输出缓冲,则可以通过以下方式解决问题:

控制器类(逻辑所在的位置)有一个成员,该成员是模板类的实例。 控制器类有一个
\uu destruct
方法,用于呈现模板

调用
exit()
die()
时,将调用控制器对象的
\uu destruct
方法,该方法反过来调用模板对象的
render
方法。

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

抛出异常将引发到周围try所在的任何位置。如果没有达到顶层,它将终止脚本的所有执行

全局范围的return将从当前include文件返回,返回到该文件的include/require


就我个人而言,我推荐一种经过深思熟虑的异常处理方法,并使用try/throw。

那么可能
die()
不是正确的命令。背景是什么?你为什么要杀掉这个脚本呢?不,如果是你的时间,你只需要死就行了(对不起)说真的,看来你走错方向了。只要不要在页面仍在运行时杀死它。使用更好的错误处理@Felix Kling出于安全考虑,如果GET参数的值不是3个预先确定的可接受值,我就杀了这个脚本。从楼顶跳下来,开枪,喝点油,除非没有降落伞,否则飞机会跳转。在输出任何东西之前,你应该做所有的处理。不,因为我在页面上有超过1个包含不同级别的文件,处理部分在中间,如果有其他的方法,我不想担心订单。业务逻辑属于控制器。存储/数据逻辑属于模型。显示逻辑属于视图。有趣的是,我就是这样构建框架来呈现模板的。:)很抱歉,没有。业务逻辑绝对属于模型。控制器是业务逻辑(模型)和显示(视图)之间的桥梁。搜索一下,你会发现。数据逻辑到底是什么?对我来说,这听起来像是业务逻辑的另一种说法。你当然是对的,严格来说,业务逻辑应该在模型中。。但根据我的经验,模型通常只定义数据结构以及如何存储/检索数据结构,而验证和更高级别的逻辑(即谁可以访问指定的对象)通常在控制器中处理。这就是我区分“业务逻辑”和“数据逻辑”的原因——可能更好地表示为模型中的“业务逻辑”和控制器中的“应用程序逻辑”。继续脚本的有用方法。不管你喜欢什么都可以处理,谢谢。
barfoo