有许多问题可以解决是否将异常用作用户消息,并且似乎对肯定派系和非派系都有坚定的支持者,我不希望将这个问题添加到该工作主体中。 Here只是stackexchange的一个例子。
我是PHP OOP的新手,我有一个在类中返回TRUE / FALSE的验证方法,但是如果为false,我想在没有javascript的情况下将失败的验证消息返回给用户并显示页面中带有一些css格式的消息(不在顶部等)。
如果有一些圣经的原因,该方法不应该生成用户消息/文本 - 我没关系 - 我只是想了解为什么和一个好的替代方案,如果可能的话。
我可能会为不显示更严重级别错误的自定义消息扩展异常类 - 因此可能是也可能不是解决方案的一部分,但仍然无法解决用户输出问题。
我还要承认,这可能只是试图将10磅推入1磅的麻袋。这就是本质:
class MyClass {
function validate_name($newname){
try {
//some code to validate that test for a normal failure conddition
throw new Exception('a user friendly message')
}
catch (Exception $e) { // Report the error!
echo '<p class=0"error">An error occurred: ' . $e->getMessage() . '</p>';
}//end catch
}//end validate_name
}//end Class
然后在页面中,它是:
$obj = new MyClass();
if (isset($_POST['item'])) {
$obj->set_new_cat($_POST['item1'],$_POST['item2']);
}//end if isset post
<form name="form1" method="post" action="">
Name: <br/><input name="item1" type="text" />
Description (optional):
<input name="item2" type="text" />
<br/>
<?php ???how to display error messages here???>
<button id="submit" type="submit" name="action" >Add Category</button>
</form>
在之前的程序变体中,我在页面上使用$ errors数组,并从数组中提取消息,但是在类中使用该方法,我不确定如何获取返回值或消息,因为“ echo $ e-&gt; getMessage“不会按照我的意愿输出。
感觉我在这里错过了一些简单的东西,但我对此感到满意......
答案 0 :(得分:0)
调整异常处理程序,以便在无法解决异常的情况下抛出异常。
class MyClass {
function validate_name($newname){
try {
//some code to validate that test for a normal failure conddition
throw new Exception('a user friendly message');
}
catch (Exception $e) { // Report the error!
throw new Exception('<p class="error">An error occurred: ' . $e->getMessage() . '</p>');
}//end catch
}
}
然后当你输出。
$obj = new MyClass();
$error = "";
if (isset($_POST['item'])) {
try{
// assuming this calls validate_name at some point
$obj->set_new_cat($_POST['item1'],$_POST['item2']);
} catch(Exception $e) {
$error = $e->getMessage();
}
}//end if isset post
?>
<form name="form1" method="post" action="">
Name: <br/><input name="item1" type="text" />
Description (optional):
<input name="item2" type="text" />
<br/>
<?= $error ?>
<button id="submit" type="submit" name="action" >Add Category</button>
</form>