例外情况

Zephir以非常低的级别实现异常,为PHP提供类似的行为和功能。

抛出异常时,可以使用catch块来捕获异常并允许开发人员提供正确的处理:

可以在try语句中抛出异常。 和PHP一样,在catch中捕获异常并处理

var e;
try {

    throw new \Exception("This is an exception");

} catch \Exception, e {

    echo e->getMessage();
}

Zephir 还提供了一个“安静”try语句,用来忽略产生的任何异常:

try {
    throw new \Exception("This is an exception");
}

如果在<0>catch中不处理异常,可以不提供异常变量:

try {

    throw new \Exception("This is an exception");

} catch \Exception {

    echo "An exception occur!";
}

catch中捕获多个异常:

var e;
try {

    throw new \Exception("This is an exception");

} catch \RuntimeException|\Exception, e {

    echo e->getMessage();
}

Zephir允许您抛出文字或静态类型变量,就像它们是异常的消息一样:

// throw new \Exception("Test");
throw "Test";

// throw new \Exception((string) 't');
throw 't';

// throw new \Exception((string) 123);
throw 123;

// throw new \Exception((string) 123.123);
throw 123.123;

Zephir的异常提供了相同的方法来知道PHP异常发生的异常发生的位置。 也就是说,` Exception::getFile()</ 0>和 Exception::getLine()</ 0>返回抛出异常的Zephir代码中的位置:

Exception: The static method 'someMethod' does not exist on model 'Robots'
File=phalcon/mvc/model.zep Line=4042
#0 /home/scott/test.php(64): Phalcon\Mvc\Model::__callStatic('someMethod', Array)
#1 /home/scott/test.php(64): Robots::someMethod()
#2 {main}
`