Винятки
Zephir реалізує винятки на дуже низькому рівні, забезпечуючи схожу поведінку і функціональність як у PHP.
Коли генерується виняток, блок catch може бути використаний для перехоплення виключення і надання розробнику можливості забезпечити належну обробку:
Винятки можуть бути викинуті всередині блоку try. Обробка виконується в блоці catch, як і в PHP:
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");
}
Якщо вам не потрібна змінна виключення в блоці 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() та Exception::getLine() повертають ім’я файлу та номер рядка де в 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}