从另一个类中捕获一个抛出异常

时间:2015-08-21 07:27:43

标签: php

图书馆类

Library.php

<?php

namespace Namepp\Exa;

class Library
{
 // Check if this token has expired.
        if (isset($payload) {
            throw new ExpiredException('Expired!');
        }

异常类 ExpiredException.php

<?php
namespace Namepp\Exa;

class ExpiredException extends \UnexpectedValueException
{

}

我如何使用自己的系统,我使用composer自动加载库。

<?php
use \Namepp\Exa\Library;

class ControllerLit extends Controller {

public function index() {

    try{
        $example= Library::callThis();
    }catch(Exception $e){
         echo 'Caught exception: ',  $e->getMessage(), "\n";
    }

当我运行此文件时,我收到以下错误

  

致命错误:未捕获异常'\ Namepp \ Exa \ ExpiredException'   消息'已过期!'在   C:\ www \ project \ vendor \ namepp \ exa \ src \ Library.php:119堆栈跟踪:#0

我的目标是我没有致命错误,我希望我的脚本能够在捕获后继续。我错过了什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

你在全球空间(我看到没有namespace声明)。在这种情况下,当您调用该类时,您有两个选项:

  • 使用use运算符
  • 使用完全限定的班级名称

在第一种情况下

<?php
use \Namepp\Exa\Library;
use Namepp\Exa\ExpiredException;

class ControllerLit extends Controller {
    /* ... */
    try{
        $example= Library::callThis();
    } catch( ExpiredException $e){
         echo 'Caught exception: ',  $e->getMessage(), "\n";
    }
}

在第二种情况下

try{
    $example= Library::callThis();
} catch( \Namepp\Exa\ExpiredException $e){
     echo 'Caught exception: ',  $e->getMessage(), "\n";
}

答案 1 :(得分:1)

您应该考虑在try / catch中使用特定的异常类:

<?php

use Namepp\Exa\Library;
use Namepp\Exa\ExpiredException;

class ControllerLit extends Controller {

    public function index() {
        try {
             $example= Library::callThis();
        } catch (ExpiredException $e) {
            echo 'Caught exception: ',  $e->getMessage(), "\n";
        }
    }

}

答案 2 :(得分:0)

我参加晚会很晚,但是,对于未捕获的例外情况,可以使用以下方法。

在关闭大括号的类之后始终加载的任何文件中(可能是类控制器),添加以下内容。

// A user-defined exception handler function
function uncaught_exception_handler($e) {
    echo '<b>Uncaught Exception</b> ' . $e->getMessage() . ': ' . $e->getFile() . '(' . $e->getLine() . ')';
}

// Set user-defined exception handler function
set_exception_handler('uncaught_exception_handler');

这是w3schools.com

上此页代码的修改

它们几乎涵盖了所有内容,但是我更喜欢在报告中包括文件和行号,这样我就可以快速解决此问题而无需深入研究多个文件,就像处理跨越多个文件的类模式时通常是这种情况和路径。