注意:我正在使用输出缓冲。它只包含在head()和foot()函数中。
我使用以下模板在当前的PHP项目中创建页面:
<?php
include 'bootstrap.php';
head();
?>
<!-- Page content here -->
<?php
foot();
?>
以下示例是否适合使用die()?另外,如果有的话,这会给我带来什么样的问题?
<?php
include 'bootstrap.php';
head();
try
{
//Simulate throwing an exception from some class
throw new Exception('Something went wrong!');
}
catch(Exception $e)
{
?>
<p>Please fix the following error:</p>
<p><?php echo $e->getMessage(); ?></p>
<?php
foot();
die();
}
//If no exception is thrown above, continue script
doSomething();
doSomeOtherThing();
foot();
?>
基本上,我有一个包含多个任务的脚本,我正在尝试设置一种优雅的方式来通知用户输入错误,同时防止脚本的剩余部分执行。
谢谢!
答案 0 :(得分:4)
我会这样做:
head();
try {
somethingPossiblyWithError();
somethingElse();
} catch (Exception $e) {
handleError();
}
foot();
不需要死亡。如果somethingPossiblyWithError
中出现错误,则会跳过somethingElse
。 foot
将在两种情况下执行。
更新:我赞成了Shrapnel上校的答案,因为我猜你没有想到这一点,这是一个有价值的知识。在PHP中,您可以通过output buffering获得等效功能,而无需显式传递值,但它不是很漂亮 - 但是,如果您调用的函数将打印事物并且不将它们作为值返回,那么它有效了解它是有用的。
答案 1 :(得分:3)
整个页面结构错误 虽然这是最普遍的新手错误。
在准备好所有数据之前,不应该输出任何东西 您的脚本可能会发送一些HTTP标头,可能会设置一些变量以供标头()或其他任何内容使用。
因此,模板的使用是必要的 您必须将脚本分为两部分 - 获取数据部分和显示数据部分 因此,您必须将header()函数移动得更低 根据Amadan的答案,它可能是
<?php
include 'bootstrap.php';
try {
getData();
} catch (Exception $e) {
handleError();
}
head();
body();
foot();
?>
handleError()函数可以设置适当的HTTP错误代码(404或500)并用错误消息文本替换正文模板。
答案 2 :(得分:1)
出于多种原因,不推荐您的方法。你应该:
示例,上面实现:
<? $page->debug = true; ?>
<?= $page->getHead(); ?>
<?= $page->getBody(); ?>
<?= $page->getFoot(); ?>
class page {
public debug;
public function getBody() {
try {
//
} catch (Exception $e) {
$this->_errorhandler('message');
}
}
protected function _errorhandler($message) {
if ($this->debug) {
// display error message
} else {
// display nothing, log the error
// or throw concrete exception
// or redirect
}
}
...
}
这也不推荐(每个任务都需要许多单独的类),但你明白了这一点:分离,而不是混合一切。