web-dev-qa-db-fra.com

Puis-je déclarer qu'une fonction php lève une exception?

Puis-je déclarer une fonction en php qui lève une exception? Par exemple:

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

J'ai mal lu la question, voir la réponse ci-dessous de Gilad (qui devrait être acceptée).

Réponse précédente:

Vous pouvez lever une nouvelle exception du corps de la fonction. Tout est décrit ici

Exemple:

<?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

Vous pouvez utiliser @throws dans le commentaire PHPDoc, et le IDE reconnaîtra cette fonction comme levant une exception, lors de la visualisation du document, mais contrairement à Java il ne vous oblige pas à implémenter le bloc Try {} catch. Peut-être que les futures versions de IDE (j'utilise InteliJ 11) marqueront les endroits où try {} catch est attendu, le même que celui font déjà avec les types JavaScript marqués par doc (par exemple String}) lors de la reconnaissance de l'incohérence.

En bref, utiliser Doclet comme lors du codage avec des langages de script (PHP, JavaScript ..), est à son tour un outil complémentaire pour une programmation plus sûre dans le cas de langages non sûrs et non compilés.

comme ça:

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

Pour une liste des exceptions fournies avec le SPL: SPL Exceptions .

Si vous souhaitez créer votre propre exception:

Depuis la page PHP Exceptions :

L'objet levé doit être une instance de Exception Class ou une sous-classe d'Exception. Essayer de lancer un objet qui ne l'est pas entraînera une erreur PHP fatale.

Alors oui, il est possible de créer vos propres exceptions. Un peu de lecture vous aidera à réaliser ce que vous voulez.

5
Jim W.