Это правильный способ обработки различных ошибок в PHP OOP? - PullRequest
0 голосов
/ 04 августа 2020

Я создаю веб-приложение, используя объектно-ориентированное PHP, и мне интересно, как лучше всего обрабатывать такие ошибки, как «слишком короткое имя пользователя», «неправильный пароль» и т. Д. c.

Я пробовал это:

// login.php

<?php

include_once 'classes/ErrorHandler.class.php';
include_once 'classes/DataValidator.class.php';
include_once 'classes/User.class.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
    $dataValidator = new DataValidator($_POST['username']); 
    $dataValidator->length(3, 16);
    
    $dataValidator = new DataValidator($_POST['password']);
    $dataValidator->length(8);
    
    // ???
}


// HTML FORM...

------

// DataValidator.class.php

<?php

class DataValidator extends ErrorHandler
{
    private $str;
    
    public function __construct(string $str) {
        $this->str = $str;
    }
    
    public function length(int $min, int $max = 9999) {
        if (mb_strlen($this->str) < $min or mb_strlen($this->str) > $max) {
            $this->setError(self::LOGIN_ERR);
        }
    }
}

------

<?php

abstract class ErrorHandler
{   
    private $errors = [];
    
    protected const LOGIN_ERR = 'Username or passord incorrect';
    protected const DB_ERR = 'Database connection failed';
    protected const UNKNOWN_ERR = 'An unkown error occured';
    
    protected function setError($error) {
        $this->errors[] = $error;
    }
    
    protected function getErrors() {
        return $this->errors;
    }
}

Проблема: как сделать Я получаю ошибку при входе в систему. php? Я хочу, чтобы он был объектно-ориентированным, поэтому я сделал ErrorHandler абстрактным. Должен ли я сделать другой метод в DataValidator, чтобы получить существующие ошибки из ErrorHandler, или есть лучшее решение? Или, может быть, вся моя концепция неверна? Заранее спасибо!

...