web-dev-qa-db-ja.com

PHP関数が例外をスローすることを宣言できますか?

例外をスローする関数をPHPで宣言できますか?例えば:

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

質問を読み間違えました。以下のGiladからの回答を参照してください(受け入れられるはずです)。

以前の答え:

関数の本体から新しい例外をスローできます。すべて説明されています ここ

例:

<?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';
?>
15
Lee Jarvis

PHPDocコメントで@throwsを使用できます。IDEは、ドキュメントを表示するときに、この関数が例外のスローとして認識しますが、Javaとは異なりますTry {} catchブロックの実装を強制しないでください。IDE(私はInteliJ 11を使用しています)の将来のバージョンでは、try {} catchが予期される場所にマークを付けます。不整合を認識する場合、すでにdocでマークされたJavaScriptタイプ(例:String})を使用します。

要するに、スクリプト言語(PHP、JavaScript ..)でコードを書くときのようにDocletを使用することは、タイプセーフではなく、コンパイルされていない言語の場合に、より安全なプログラミングのための補完的なツールになります。

このような:

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) {
}

enter image description here

42
Gilad

SPLに付属する例外のリストについては、 SPL Exceptions です。

独自の例外を作成する場合:

PHP Exceptions ページから:

スローされるオブジェクトは、 Exception Class のインスタンスまたはExceptionのサブクラスである必要があります。ないオブジェクトをスローしようとすると、PHP致命的なエラーが発生します。

そのため、独自の例外を作成することは可能です。ほんの少しの読書はあなたがあなたが望むものを達成するのに役立ちます。

5
Jim W.