我承认这个问题有点模糊,但我会尝试通过几个例子来解释我想要完成的事情。我有一些PHP代码从MySQL数据库加载一堆变量,包含一些声明,一些快速输出HTML代码的函数等。但是我希望在将任何内容发送给客户端之前做所有这些事情。
所以我这样做:
<?php
include("somefile.inc");
function bla()
{
...
}
if (fails)
echo "Error: ...<br />";
?>
<!DOCTYPE>
<html>
<head>
<script>
...
<?php echo $someString; ?>
...
</script>
</head>
<body>
...
</body>
</html>
这一切都很好,直到我收到错误。回声不会在浏览器中显示,因为它在所有HTML之前...所以我修改了:
<!DOCTYPE>
<html>
<head>
<script>
...
<?php echo $someString; ?>
...
</script>
</head>
<body>
<div class="error_block">
<?php
include("somefile.inc");
function bla()
{
...
}
if (fails)
echo "Error: ...<br />";
?>
</div>
...
</body>
</html>
现在我实际上可以看到错误,这很好。但现在问题出现在标题或者scrips中,我无法访问稍后将在新创建的error_block中加载的变量。
我真的不喜欢将error_clock中的代码拆分为HTML文档上方的某些内容以及error_block中的某些代码。而且我也不想使用PHP的die()函数来完成执行。
任何人都可以在这个问题上给出2美分吗?感谢。
答案 0 :(得分:5)
如果您正在寻找替代解决方案,我会为您准备一个解决方案。我喜欢做的是在DOCTYPE
if(error) { $error = "Please do something" }
然后,在文档中我有一个div只是为了错误(感谢@Dave输入)
<?php echo $error != '' ? '<div id="error">' . $error . '</div>' : ''; ?>
如果没有错误(意味着$error
为空),则不会显示此div,并且您可以更轻松地按照您希望的方式设置错误消息的样式
#error { color:red; }
如果你想获得幻想,你可以使用一些jQuery隐藏/显示div,这样就不会有错误。
$('#error').show().delay(7000).fadeOut();
答案 1 :(得分:0)
如果您想使用错误消息(包括显示)进行一些后处理,您应该考虑使用try-catch块并生成异常。
答案 2 :(得分:-1)
经常被遗忘的是,PHP本质上是一种INLINE编程语言,这意味着它被设计为在服务器读取页面时由服务器处理,并且通过它设计为分成块。最近,OOP(面向对象编程)已经引入PHP,使其更加灵活。
所以有了这些信息,我会在这种情况下采用OOP路径,并执行以下操作:
<!DOCTYPE>
<?php
include("somefile.inc");
function bla()
{
...
}
function failureError($code){
if(!empty($code)) ...
}
if ($a = $b) {
code goes here
} else {
$code = 'error123';
}
?>
<html>
<head>
<script>
...
<?php failed($code); ?>
...
</script>
</head>
<body>
...
</body>
</html>
通过使用函数编写,您可以缩短开发时间,并将大部分代码分组,只需在需要时调用所需的代码即可。
声明错误类/函数以帮助服务器响应时间的另一种方法是执行以下操作:
if ($a = $b) {
code goes here
} else {
include("errorStuff.php");
}
这只会在遇到错误时包含错误类/函数。
请记住,当您使用这样的OOP技术编写PHP时,服务器处理脚本所需的时间比编写内联时要长。 OOP基础的最大优势是它将缩短您的开发时间,如果正确完成,它将使您可以更轻松地管理脚本的未来更新。