2010-10-14 7 views
6

Другой сотрудник, и я сильно модифицировал расширение PHP Zookeeper, но единственное, что меня беспокоит, - это зависимость от ошибок PHP-ошибок и исключений.Выбрасывание исключения вместо ошибки из расширения PHP

Оригинальный источник здесь: http://github.com/andreiz/php-zookeeper/blob/master/php_zookeeper.c#L209

Вместо этого было бы лучше, чтобы подбросить Zookeeper_NodeNotExists или аналогично, за исключением я понятия не имею, что вызов API в С.

Я пробовал поиск в Интернете и получил результирующий набор Исключений на языке PHP, руководство по PHP, похоже, не упоминает их, и я не могу вспомнить, какие расширения PHP-акций вызывают исключение для вас. Есть ли альтернативный источник документации по API-интерфейсу PHP/Zend c там?

+0

Последний раз, когда я смотрел (это было давно), PHP был написан в 'C'. В 'C' нет исключений. – pmg

+0

Посмотрите на источник различных исключений, которые делают исключение (не можете думать о каких-либо сумасшедших ... мозгах) и посмотреть, что они используют. –

+1

@pmg Нет языка C не имеет понятия для try/catch ... но PHP5 делает, поэтому должна быть функция zend_ или php_ API, которая генерирует исключение из расширения в PHP-скрипт – David

ответ

7

Я смотрел на исходный код для расширения Sqlite PHP 5.3, в частности, Sqlite.c, которую я знал, бросил исключение и нашел

через SQLite - https://github.com/php/php-src/blob/PHP-5.3/ext/sqlite/sqlite.c#L46

#include "zend_exceptions.h" 

В zend_exceptions.h, это выглядит как RuntimeException может быть повышена с помощью простого вызова

zend_throw_exception(NULL, "Some text") 

, как описано здесь https://github.com/php/php-src/blob/PHP-5.3/Zend/zend_exceptions.h#L43

Расширение Sqlite3 использует это как так:

zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Already initialised DB Object", 0 TSRMLS_CC); 

, где я делаю вывод, что zend_exception_get_default() получает ссылку/ручка для RuntimeException, то второй аргумент сообщения Exception, а все остальные работы делегирована.

Смежные вопросы