Лучшая практика PHP класса для вывода сообщения - PullRequest
0 голосов
/ 25 августа 2018

Я искал некоторое время, но я мог найти только раздельные мнения, некоторые из них крайне запутанные.

Как лучше всего возвращать сообщение, если выполнены определенные условия?

Например, у меня есть класс, для которого я хочу вывести сообщение, если не установлена ​​переменная $_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();
?>

Как вы можете видеть сейчас, я используюecho внутри этого getUser() метода, но я чувствую, что это очень плохая практика :(. Так что в принципе есть хорошая практика? Или все практики хороши, если они работают? И если есть хорошая практика, можете ли выпожалуйста, объясните мне, почему это лучше, чем другие?

Спасибо!: D

1 Ответ

0 голосов
/ 25 августа 2018

Лучшая практика также основана на приложении.

В вашем примере я должен вернуть исключение.В верхней части приложения вы можете запустить попытку / перехват для обработки исключений.

Например

<?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';
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...