我可以声明一个php函数抛出异常吗?

sha*_*hay 38 php exception throw throws

我可以在php中声明一个抛出异常的函数吗?例如:

public function read($b, $off, $len) throws IOException 
Run Code Online (Sandbox Code Playgroud)

Gil*_*lad 40

您可以在PHPDoc注释中使用@throws,并且IDE在查看文档时会将此函数识别为抛出异常,但与Java不同,它不会强制您实现Try {} catch块.也许IDE的未来版本(我使用的是InteliJ 11)将标记那些需要try {} catch的地方,与识别不一致时已经使用doc标记的JavaScript类型(例如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) {
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这应该是IMO接受的答案(OP希望明确表示函数可以抛出异常并且不会询问如何抛出异常),尽管应该删除图像中的大量尾随空白. (9认同)

Lee*_*vis 15

您可以从函数体中抛出一个新的异常.这一切都在这里描述

例:

<?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';
?>
Run Code Online (Sandbox Code Playgroud)

  • 这不是这个问题的答案。问题是如何“声明” **,而不是如何引发异常。 (3认同)
  • 正确答案是吉拉德。您需要使用PHPDoc。 (2认同)

Jim*_* W. 5

有关SPL随附的异常的列表:SPL Exceptions

如果要创建自己的异常:

从“ PHP例外”页面:

抛出的对象必须是Exception类的实例或Exception的子类。尝试抛出非对象,将导致PHP致命错误。

因此,可以创建自己的异常。只需一点阅读即可帮助您实现所需的目标。