我有一个自定义类:
class ActivationService extends SmsException {
public function __construct()
{
$this->sms = new SmsSender();
}
public function method(){
throw new SmsException(); // My custom exception
}
public function send(){
$this->sms->sendSms($this->phone); // Here's where the error appeared
}
}
因此,当我致电$this->sms->sendSms
时,我从班级sms
收到错误。
我正在捕捉自定义异常,如:
try {
$activationService = new ActivationService();
$activationService->send($request->phone);
}
catch (SmsException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
但是当我在方法:class SmsSender
中获取库中的错误(send()
)时,我无法捕获它并且我收到错误。
我该如何解决?
答案 0 :(得分:1)
它可能是命名空间的东西。
如果在命名空间中定义SmsException
,例如:
<?php namespace App\Exceptions;
class SmsException extends \Exception {
//
}
并且尝试捕获异常的代码在另一个名称空间中定义,或者根本没有定义,例如:
<?php App\Libs;
class MyLib {
public function foo() {
try {
$activationService = new ActivationService();
$activationService->send($request->phone);
} catch (SmsException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
}
然后它会尝试捕捉App\Libs\SmsException
,而catch
未定义,因此catch (SmsException $e)
失败。
如果是这种情况,请尝试将catch (\App\Exceptions\SmsException $e)
替换为use
(显然使用正确的命名空间),或在文件顶部放置<?php App\Libs;
use App\Exceptions\SmsException;
class MyLib {
// Code here...
语句。
{{1}}