Исключения
Zephir реализует исключения на очень низком уровне, обеспечивая подобное PHP поведение и функциональность.
Когда генерируется исключение, блок catch
может быть использован для перехвата исключения и предоставления разработчику возможности обеспечить надлежащую обработку:
Исключения могут быть выброшены внутри блока try
. Обработка происходит в блоке catch
точно так же, как в PHP:
var e;
try {
throw new \Exception("Это - исключение");
} catch \Exception, e {
echo e->getMessage();
}
Zephir также предоставляет “тихий” блок try
, который просто игнорирует любые исключения, генерируемые внутри этого блока:
try {
throw new \Exception("Это исключение");
}
Если вам не нужна переменная исключения при его перехвате, вы можете не указать её:
try {
throw new \Exception("Это исключение");
} catch \Exception {
echo "An exception occur!";
}
Один catch
блок может использоваться для перехвата нескольких типов исключений:
var e;
try {
throw new \Exception("Это исключение");
} catch \RuntimeException|\Exception, e {
echo e->getMessage();
}
Zephir позволяет выбрасывать любые литеры или статически типизированные переменные, как если бы они были сообщением исключения:
// throw new \Exception("Тест");
throw "Тест";
// 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}