我正在尝试寻找正确的解决方案来捕获消息,但是不确定是否可行。
我有一个简单的PHP
结构,其中包含try
和catch
:
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
内进行检查。
是否可以通过第一种方式做到这一点?
答案 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;
}