0

エラーが発生する可能性があることがわかっているメソッドを呼び出しており、コードをtry/catchステートメントでラップしてエラーを処理しようとしています...

class TestController extends Zend_Controller_Action
{

    public function init()
    {
        // Anything here happens BEFORE the View has rendered
    }

    public function indexAction()
    {
        // Anything `echo`ed here is added to the end of the View
        $model = new Application_Model_Testing('Mark', 31);
        $this->view->sentence = $model->test();
        $this->loadDataWhichCouldCauseError();
        $this->loadView($model); // this method 'forwards' the Action onto another Controller
    }

    private function loadDataWhichCouldCauseError()
    {
        try {
            $test = new Application_Model_NonExistent();
        } catch (Exception $e) {
            echo 'Handle the error';
        }
    }

    private function loadView($model)
    {
        // Let's pretend we have loads of Models that require different Views
        switch (get_class($model)) {
            case 'Application_Model_Testing':
                // Controller's have a `_forward` method to pass the Action onto another Controller
                // The following line forwards to an `indexAction` within the `BlahController`
                // It also passes some data onto the `BlahController`
                $this->_forward('index', 'blah', null, array('data' => 'some data'));
                break;
        }
    }

}

...しかし、私が抱えている問題は、エラーが処理されていないことです。アプリケーションを表示すると、次のエラーが発生します...

( ! ) Fatal error: Class 'Application_Model_NonExistent' not found in /Library/WebServer/Documents/ZendTest/application/controllers/TestController.php on line 23

なぜこれが起こっているのか、そしてどうすればそれを機能させることができるのか、誰かが説明できますか?

ありがとう

4

4 に答える 4

3

使用する

if (class_exists('Application_Model_NonExistent')) {
    $test = new Application_Model_NonExistent;
} else {
    echo 'class not found.';
}

@prodigitalsonが言ったように、その致命的なエラーをキャッチすることはできません。

于 2013-02-22T18:16:12.527 に答える
2

エラーと例外は同じものではありません。例外がスローされ、キャッチされることを意図しています。エラーは通常、回復不能であり、http: //www.php.net/manual/en/function.trigger-error.phpでトリガーされます。

エラーのためにクリーンアップを行う必要がある場合は、http://www.php.net/manual/en/function.set-error-handler.phpを使用できます。

于 2013-02-22T18:12:54.753 に答える
0

それは例外ではありません、FATALそれはあなたがそのようにそれを捕まえることができないことを意味するエラーです。定義上、aFATALは回復可能であってはなりません。

于 2013-02-22T18:12:17.907 に答える
0

例外とエラーは別物です。使用しているExceptionクラスがあり、その$eがそのオブジェクトです。

エラーを処理したい場合は、php-zendフレームワークでエラー処理を確認してください。しかし、ここでは、これは致命的なエラーです。修正する必要があり、処理できません。

于 2013-02-22T18:13:12.803 に答える