Php 自定义向用户发送异常消息的通信,而无需使用;“回声”;在接球区?

Php 自定义向用户发送异常消息的通信,而无需使用;“回声”;在接球区?,php,exception,user-experience,Php,Exception,User Experience,有许多问题涉及是否使用异常作为用户消息,而且似乎有坚定的支持者支持“是”和“否”两个派系,我不希望这个问题添加到这一系列工作中。这只是stackexchange的一个例子 我是PHP OOP新手,我有一个validate方法,在类中返回TRUE/FALSE,但如果为FALSE,我希望将失败的验证消息返回给用户,而不使用javascript,并在页面中以css格式显示该消息(不在顶部等) 如果有一些圣经上的原因,该方法不应该生成用户消息/文本-我同意-我只是想了解为什么,如果可能的话,一个好的替代

有许多问题涉及是否使用异常作为用户消息,而且似乎有坚定的支持者支持“是”和“否”两个派系,我不希望这个问题添加到这一系列工作中。这只是stackexchange的一个例子

我是PHP OOP新手,我有一个validate方法,在类中返回TRUE/FALSE,但如果为FALSE,我希望将失败的验证消息返回给用户,而不使用javascript,并在页面中以css格式显示该消息(不在顶部等)

如果有一些圣经上的原因,该方法不应该生成用户消息/文本-我同意-我只是想了解为什么,如果可能的话,一个好的替代方案

我可能会扩展一个自定义消息的Exception类,该消息不会显示更严重的级别错误,因此这可能是解决方案的一部分,也可能不是解决方案的一部分,但仍然不能解决用户输出问题

我也要承认,这可能只是一个试图把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
class-MyClass{
函数名($newname){
试试{
//一些代码用于验证正常故障条件下的测试
抛出新异常(“用户友好的消息”)
}
catch(异常$e){//报告错误!
echo“

发生错误:”.$e->getMessage()。

”; }//端接 }//结束验证\u名称 }//末级
然后在页面中,它是:

$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>
$obj=newmyclass();
如果(isset($_POST['item'])){
$obj->set_new_cat($_POST['item1'],$_POST['item2']);
}//如果设置了桩,则结束
名称:
说明(可选):
添加类别
在前面的一个过程变体中,我在页面上使用了$errors数组,其中包含从数组中提取的消息,但对于类中的方法,我不确定如何获取返回值或消息,因为“echo$e->getMessage”不会按我所希望的方式输出


我觉得这里缺少了一些简单的东西,但我对此一无所知……

调整异常处理程序,以便在无法解决异常时抛出异常

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    
    }
}
class-MyClass{
函数名($newname){
试试{
//一些代码用于验证正常故障条件下的测试
抛出新异常(“用户友好的消息”);
}
catch(异常$e){//报告错误!
引发新异常(“

发生错误:”.$e->getMessage()。

”; }//端接 } }
然后当你输出

$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>
$obj=newmyclass();
$error=“”;
如果(isset($_POST['item'])){
试一试{
//假设这会在某个点调用validate_name
$obj->set_new_cat($_POST['item1'],$_POST['item2']);
}捕获(例外$e){
$error=$e->getMessage();
}
}//如果设置了桩,则结束
?>
名称:
说明(可选):
添加类别
感谢您的快速回复—我认为这会奏效—但实际上—Xdebug会报告异常,但无论生成了什么异常,$error都会保持初始化状态(使用$error上的var_dump)。我检查了代码-您确定此功能如所述吗?谢谢你的帮助!如果行
$obj->set\u new\u cat
(我假设它正在调用validate\u name)发出异常,那么$error将被设置为

发生错误:”$e->getMessage()

除非您也在set_new_cat方法中捕获,否则将在set_new_cat()方法中调用validate_name()。我想我可以在页面上单独调用validate_name(),但我试图在类中留下尽可能多的内容,因为这段代码会经常重复。是否有一种技术可以在类/异常处理中实现这一点?