首页 > 解决方案 > PHP 类输出消息的最佳实践

问题描述

我一直在寻找一段时间,但我只能找到分歧的意见,其中一些非常令人困惑。

如果满足某些条件,返回消息的最佳做法是什么?

例如,我有一个类,如果没有$_GET设置变量,我想输出一条消息 - 这是类文件:

<?php
class User{
    public $_name;

    public function getUser(){
        if(empty($_GET)){
            echo 'There\'s no user!';
            return;
        }
        //do something else
        return;
    } 
}
?>

然后这是我使用该类的文件:

<?php
$user = new User();
$user->getUser();
?>

正如您现在所看到的,我正在使用echogetUser()方法,但我觉得这是一个非常糟糕的做法:(。所以基本上有一个好的做法吗?或者所有的做法都是好的,只要它们有效?如果有一个好的做法你能解释一下为什么它比其他人更好吗?

谢谢!:D

标签: phpclassoop

解决方案


最佳实践也基于应用程序。

在您的示例中,我应该返回一个异常。在应用程序的顶部,您可以运行 try/catch 来处理异常。

例如

<?php
class User{
    public $_name;

    public function getUser(){
        if(empty($_GET)){
            throw new Exception("There is no User");
        }
        //do something else
        return;
    } 
}
?>

最后:

<?php
try {
    $user = new User();
    $user->getUser();
} catch (Exception $exception) {
    echo $exception->getMessage();
}
?>

好处是,您可以在一个位置处理消息,并且更容易处理错误消息,例如

echo "<strong>". $exception->getMessage(). "</strong>";

编辑:与@Ggg 所说的原因相同:

一般的经验法则:一个类返回数据,所以当你调用 getUser 时,它应该接收用户数据。回声不是工作班(imo)– Ggg

如果您不想使用 try/catch 模块,我建议您不要在发生消息时回显消息,而是返回布尔值或消息。与上述相同的原因: 在一个地方处理消息。例如

<?php
class User{
    public $_name;

    public function getUser(){
        if(empty($_GET)){
            return 'no user found'
        }
        //do something else
        return;
    }

    public function login(){
        if(empty($_GET)){
            return false
        }
        //do something else
        return;
    } 
}
?>

最后:

<?php
$user = new User();
echo $user->getUser();
// OR (and I think better):
if (!$user->login()) {
    echo 'Invalid login';
}
?>

推荐阅读