我正在尝试在PHP中处理异常但堆栈错误仍然显示而不是由catch处理

I'm calling a method that I know could cause an error and I'm trying to handle the error by wrapping the code in a try/catch statement...

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;
        }
    }

}

...but the problem I have is that the error isn't being handled. When viewing the application I get the following error...

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

Can any one explain why this is happening and how I can get it to work?

Thanks

use

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

like @prodigitalson said you can't catch that fatal error.

Thats not an exception, thats a FATAL error meaning you cant catch it like that. By definition a FATAL should not be recoverable.

An error and an exception are not the same thing. Exceptions are thrown and meant to be caught, where errors are generally unrecoverable and triggered with http://www.php.net/manual/en/function.trigger-error.php

If you need to do some cleanup because of an error, you can use http://www.php.net/manual/en/function.set-error-handler.php

Exception and Error are different things. There is an Exception class, which you are using and that $e is it's object.

You want to handle errors, check error handling in php-zend framework. But here, this is a Fatal error, you must rectify it, can not be handled.