多个函数在类中的PHP错误处理

时间:2016-06-30 10:11:21

标签: php arrays oop

几天前有人问过有关错误处理的类似问题。人们向我解释了如何从课堂上获得错误。我理解如何创建错误名称并在__construct部分进行验证,但仍然在努力解决多种功能

    class magic
{
    /**
     * @param string $name
     * @param string $surname
     * @param int $age
     * @throws Exception
     */
    public function __construct($name, $surname, $age)
    {
        $errors = [];

        if (empty($name)) {
            $errors[] = 'Name is required.';
        }

        if (empty($surname)) {
            $errors[] = 'Surname is required.';
        }

        if (!empty($errors)) {
            throw new Exception(implode('<br />', $errors));
        }

        $this->name = $name;
        $this->surname = $surname;
        $this->age = $age;
    }

    public function printFullname()
    {
        echo $this->name . ' ' . $this->surname;
    }

}

另一个档案:

include 'class.php'; 
    try {
        $test = new magic('', '', '33');
        $test->printFullname();
    } catch (Exception $exc) {
        echo $exc->getMessage(); //error messages
    }

它可以解决这个类中的另一个函数问题:

class magic
    {
        /**
         * @param string $name
         * @param string $surname
         * @param int $age
         * @throws Exception
         */
        public function __construct($name, $surname, $age)
        {
            $errors = [];

            if (empty($name)) {
                $errors[] = 'Name is required.';
            }

            if (empty($surname)) {
                $errors[] = 'Surname is required.';
            }

            if (!empty($errors)) {
                throw new Exception(implode('<br />', $errors));
            }

            $this->name = $name;
            $this->surname = $surname;
            $this->age = $age;
        }

        public function printFullname()
        {
            echo $this->name . ' ' . $this->surname;
        }

public function auth()
{
//authentication goes here

if... 
$errors[] = 'Error1';
else
$errors[] = 'Error2';
etc...

}


}

另一个档案:

include 'class.php'; 
        try {
            $test = new magic('', '', '33');
            $test->auth();
        } catch (Exception $exc) {
            echo $exc->getMessage(); //error messages
        }

我的函数auth()工作并返回错误,好像然后是echo但我想用数组做。

2 个答案:

答案 0 :(得分:1)

我认为你所做的事情是不必要的。

顺便说一下,你已经编写了构造函数参数,你会自动说这些参数是必需的,不能为空,因为你没有为它们设置默认值。

对于多个功能中的错误,我建议您查看自定义异常。为每个特定错误创建自定义异常(如果您需要应用不同的操作或不同类型的错误),然后像使用Exception一样捕获它们。

答案 1 :(得分:0)

如果要将异常中的错误作为数组获取,则应创建自己的异常类:

class MagicException extends Exception
{
    private $errors;

    function __construct($message, array $errors, $code = 0, Exception $previous = null)
    {
        parent::__construct($message, $code, $previous);
        $this->errors = $errors;
    }

    function getErrors()
    {
        return $this->errors;
    }
}

用法:

try {
    $errors = [];

    // some code..
    $errors[] = 'Example error';

    if ($errors) {
        throw new MagicException('Something went wrong', $errors);
    }
} catch (MagicException $e) {
    // @todo: handle the exception
    print_r($e->getErrors());
}

输出:

Array
(
    [0] => Example error
)