如何从另一个类中捕获异常?

时间:2016-11-23 16:05:28

标签: php laravel exception laravel-5.3

我有一个自定义类:

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())时,我无法捕获它并且我收到错误。

我该如何解决?

1 个答案:

答案 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}}