有两个参数的PHP异常

时间:2018-09-26 09:39:32

标签: php html iis

我正在尝试寻找正确的解决方案来捕获消息,但是不确定是否可行。

我有一个简单的PHP结构,其中包含trycatch

if (!$this->issetAndNotEmpty($id))
                    {
                        throw new Exception('My error message');
                    }

...
  catch (Exception $exc)
  {
        echo'<div class="error">'.  $exc->getMessage().'</div>';
  }
...

它按预期工作。但是,我们要求对某些错误(但不是对所有错误)都返回错误噪声(嘟嘟声)。最好的方法是在catch部分中添加新功能。这样,每次都会发出哔哔声。 是否可以在throw new Exception('My error message', true(or something like that));中添加第二个参数 然后在if语句下运行此功能? 另一种方法是在类内添加变量并将其设置为true并在错误消息之前在catch内进行检查。

是否可以通过第一种方式做到这一点?

1 个答案:

答案 0 :(得分:1)

您应该创建一个特定的Exception类,以扩展PHP的通用Exception,该类可以接受额外的参数,并允许您专门捕获它并根据需要进行处理,从而允许其他异常进入默认捕获。 / p>

<?php

/**
 * Class BeepException
 * Exception that beeps
 */
class BeepException extends Exception
{
    // Member variable to hold our beep flag
    protected $beep;

    /**
     * BeepException constructor.
     * @param $message
     * @param bool $beep
     * @param int $code
     */
    public function __construct($message, $beep=false, $code = 0)
    {
        $this->beep = $beep;

        parent::__construct($message, $code);
    }

    /**
     * Return the value of our beep variable
     * @return bool
     */
    public function getBeep()
    {
        return $this->beep;
    }
}

try
{
    throw new BeepException('This should beep...', true);
}
catch(BeepException $e)
{
    echo $e->getMessage().PHP_EOL;

    if($e->getBeep())
    {
        echo 'BEEEEEEP!'.PHP_EOL;
    }
}
catch(Exception $e)
{
    echo $e->getMessage().PHP_EOL;
}