Zephir реализует исключения на очень низком уровне, обеспечивая аналогичное поведение и функциональность PHP.

При возникновении исключения блок ' catch’ может использоваться для записи исключения и позволяет разработчику обеспечить правильную обработку:

var e;
try {

    // exceptions can be thrown here
    throw new \Exception("This is an exception");

} catch \Exception, e {

    // handle exception
    echo e->getMessage();
}

Zephir также предоставляет "тихий" блок ' try’, который просто игнорирует любые исключения, произведенные в этом блоке:

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

Если вам не нужна переменная исключения при "перехвате", то вы можете безопасно не предоставлять ее:

try {

    // exceptions can be thrown here
    throw new \Exception("This is an exception");

} catch \Exception {

    // handle exception
    echo "An exception occur!";
}

Один блок ' catch’ может использоваться для перехвата нескольких типов исключений:

var e;
try {

    // exceptions can be thrown here
    throw new \Exception("This is an exception");

} catch \RuntimeException|\Exception, e {

    // handle exception
    echo e->getMessage();
}

Zephir позволяет выдавать литералы или статические типизированные переменные, как если бы они были сообщением об исключении:

throw "Test"; // throw new \Exception("Test");
throw 't'; // throw new \Exception((string) 't');
throw 123; // throw new \Exception((string) 123);
throw 123.123; // throw new \Exception((string) 123.123);

Исключения Zephir предоставляют те же методы, чтобы знать, где произошло исключение, что и исключения PHP. То есть Exception:: getFile() и Exception:: getLine() возвращают расположение в коде Zephir, где было выдано исключение:

Exception: The static method 'someMethod' doesn't 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}

Содержание.

Предыдушая  Следующая