【问题标题】:Get errors while throwing an array() as Exception将数组()作为异常抛出时出错
【发布时间】:2016-12-12 21:57:53
【问题描述】:

我正在尝试将数组作为异常传递。稍后我会将其编码为 json。

try {
    class myException extends Exception {
        private $params;
        public function setParams(array $params) { $this->params = $params; }
        public function getParams() { return $this->params; }
    }

    throw new myException(
        array(
            'error' => array(
                'status' => true,
                'code' => '12',
                'note' => 'Does NOT contain application/json'
            )
        )
    ); 

} catch (myException $e) {
    print_r($e->getParams());
}

但不断收到以下错误:

致命错误:未捕获错误:myException([string $message [, long $code [, Throwable $previous = NULL]]]) in /home/domain/script.php:79 堆栈跟踪:

#0 /home/domain/script.php(79): Exception->__construct(Array)

#1 {main} 在第 79 行的 /home/domain/script.php 中抛出


甚至可以传递数组吗?

如果是这样,我的代码有什么问题?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    Exception::__construct 需要一个字符串作为第一个参数。如果你想传递一个数组,你应该重写构造函数。

    class myException extends Exception {
        private $params;
        public function setParams(array $params) { $this->params = $params; }
        public function __construct(array $params = array(), $code = 0,  Throwable $previous = NULL) {
            $this->setParams($params);
    
            parent::__construct('', $code, $previous);
        }
    

    【讨论】:

    • 使用时出现以下错误:Fatal error: Uncaught Error: Call to undefined method myException::setParams() in /home/domain/script.php:25 Stack trace: #0 /home/domain/script.php(79): myException->__construct(Array) #1 {main} thrown in /home/domain/script.php on line 25
    • 第 25 行是$this->setParams($params); 所在的位置。
    • 为什么要删除public function setParams(array $params) { $this->params = $params; }?你应该继续上课。
    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多