几天前有人问过有关错误处理的类似问题。人们向我解释了如何从课堂上获得错误。我理解如何创建错误名称并在__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但我想用数组做。
答案 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
)