在对象类内部引发异常并在外部捕获异常?

时间:2018-07-15 00:25:40

标签: php api exception

我想做的是在类内抛出异常。

然后在执行时能够将其捕获。

LANG=C find . -type f -name *.jpg -regex '.*[ñ].*'

class api {

    public function __construct($user_id, $token) {}

    public function post($data) {
        throw new customException\Post('Error 1');
    }

}

我如何使类似的东西起作用?


我无法让try { $api = new api('id','key'); $output = $api->post($data); } catch(customException\Post $e) { var_dump($e); } catch(exception $e) { var_dump($e); } 那样工作……为什么?

使用customException\Post时出现此错误:

customException

1 个答案:

答案 0 :(得分:1)

如果您不使用名称空间:

<?php
class CustomException_Post extends Exception {}

class api {
    public function __construct($user_id, $token) {}

    public function post($data) {
        throw new CustomException_Post('Error 1');
    }
}

$data = [];
try {
    $api = new api('id','key');
    $output = $api->post($data);
} catch (CustomException_Post $e) {
    var_dump($e);
} catch (Exception $e) {
    var_dump($e);
}

https://3v4l.org/Q196X

如果是的话,则需要一个自动加载器,假设您正在使用作曲器,则在添加psr4自动加载项后会看起来像这样

CustomException文件夹中,名为Post.php的文件。

<?php
namespace CustomException;
class Post extends \Exception {}

然后在您的代码中可以使用:

<?php

use CustomException;

class api {
    public function __construct($user_id, $token) {}

    public function post($data) {
        throw new CustomException\Post('Error 1');
    }
}

$data = [];
try {
    $api = new api('id','key');
    $output = $api->post($data);
} catch (CustomException\Post $e) {
    var_dump($e);
} catch (\Exception $e) {
    var_dump($e);
}