Могу ли я объявить, что функция php выдает исключение?

Могу ли я объявить функцию в php, которая выдает исключение? Например:

public function read($b, $off, $len) throws IOException 

person shay    schedule 24.07.2010    source источник
comment
Не существует системы для объявления исключений, которые могут быть выброшены. Вы можете легко их бросать, но в лучшем случае вы можете добавить @throws в комментарий phpdoc (например, javadoc) перед функцией.   -  person Wrikken    schedule 24.07.2010
comment
+1 за комментарий Вриккена   -  person Gavriel    schedule 22.03.2012
comment
реальный ответ на этот вопрос - комментарий Вриккена.   -  person Alessandro Cosentino    schedule 05.08.2012


Ответы (3)


Я неправильно понял вопрос, см. ответ Гилада ниже (который следует принять).

Предыдущий ответ:

Вы можете создать новое исключение из тела функции. Все это описано здесь

Пример:

<?php
function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');
    }
    else return 1/$x;
}

try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

// Continue execution
echo 'Hello World';
?>
person Lee Jarvis    schedule 24.07.2010
comment
да, я прочитал это, я подумал, может быть, это возможно, и я пропустил учебник. Итак, я не могу объявить метод, который генерирует исключение? как насчет IOException, есть ли такая вещь, или мне нужно создать ее самостоятельно? - person shay; 24.07.2010
comment
Нет, его уже нет. Но вы можете объявить это (расширить соответствующее исключение SPL ( class IOException extends RuntimeException {}) - person ircmaxell; 24.07.2010
comment
Правильный ответ Гилада. Вам нужно использовать PHPDoc. - person Tomas Bruckner; 04.05.2018
comment
Это не ответ на этот вопрос. Вопрос заключался в том, как объявить, а не в том, как создать исключение. - person AleX; 10.10.2018

Вы можете использовать @throws в комментарии PHPDoc, и IDE распознает эту функцию как генерацию исключения при просмотре документа, однако, в отличие от Java, это не заставит вас реализовать блок Try{}catch. Возможно, будущие версии IDE (я использую InteliJ 11) будут отмечать те места, где ожидается try{}catch, так же, как это уже делается с типами JavaScript, помеченными doc (например, String}), при распознавании несоответствия.

Короче говоря, использование Doclet, например, при написании кода на языках сценариев (PHP, JavaScript и т. д.), становится дополнительным инструментом для более безопасного программирования в случае небезопасных по типу и некомпилируемых языков.

как это:

enter code here
/**
 * Handle 'get' operations
 * @abstract
 * @param int $status reference for setting the response status
 * @param String $body reference for setting the response data
 * @return mixed
 * @throws Exception if operation fail
 */
function get(&$status, &$body) {
}

введите здесь описание изображения

person Gilad    schedule 28.04.2013
comment
Это должен быть ИМО принятый ответ (OP хотел явно указать, что функция может генерировать исключение, и не спрашивал, как его генерировать), хотя массивное пустое пространство в конце изображения следует удалить. - person wtf8_decode; 27.08.2015
comment
а как же пхп 7? еще ничего? - person Toskan; 21.12.2018
comment
Нет, еще ничего. - person Rich Court; 13.05.2019

Список исключений, входящих в состав SPL: Исключения SPL.

Если вы хотите создать собственное исключение:

На странице Исключения PHP:

Брошенный объект должен быть экземпляром Класса исключений или подклассом Исключение. Попытка бросить объект, который не является фатальной ошибкой PHP.

Так что да, можно создавать свои собственные исключения. Всего лишь немного чтения поможет вам достичь того, что вы хотите.

person Jimithus    schedule 24.07.2010
comment
спасибо, а как насчет объявления функции как исключения? мне просто нужно бросить исключение - person shay; 24.07.2010
comment
Должен ли я перехватывать каждое исключение, даже если это простое исключение, такое как OutOfRangeException? я не могу запустить код без каких-либо исключений? - person shay; 24.07.2010