2010-10-14 24 views
3

J'ai une application basée sur Zend Framwork. Dans un modèle, j'appelle une méthode d'un autre modèle. Quand j'appelle cette méthode, j'utilise le bloc try-cath pour gérer des situations étranges. Modèle1.Lancer une exception sur chaque erreur d'application

try { 
    $result = Module_Model2_Name->method(); 
} catch (Exception $e) { 
    // Do Something 
} 

Catch devrait fonctionner si nous trouvons un bloc try dans le try. Mais je ne connais pas le comportement de mon application. Si c'est une erreur d'application dans la méthode Model2, il faut lancer une exception. Dans la méthode de Model2 je fais la chose suivante, mais il ne fonctionne pas:

set_error_handler(create_function('$m = "Error"','throw new Exception($m);'), E_ALL); 

Comment puis-je jeter une exception sur toutes les erreurs d'application PHP? Merci beaucoup. Désolé pour mon anglais.

+1

+1 pour corriger deux downvotes stupides, inexpliqués et inutiles. J'espère sincèrement qu'ils ne sont pas pour l'anglais. – Shabbyrobe

+1

@Shabbyrobe Je suis sûr qu'ils étaient parce que la question a été correctement répondu et l'OP downvoted la réponse évidemment correcte avec un simple «Ce n'est pas une réponse». Si ce n'était pas la réponse, alors c'était une question * vraiment * mauvaise. Bien sûr, le PO a maintenant accepté cette réponse. –

+1

Modifié pour permettre le changement de vote puisque le PO a depuis accepté la réponse qu'il a downvoted. –

Répondre

8

Cela me semble bon (testé).

<?php 
set_error_handler(create_function('$nr, $msg = "Error"','throw new Exception($m);'), E_ALL); 
try{ 
    foreach($notHere as $var){} 
} 
catch(Exception $e){ 
    var_dump($e); 
} 
?> 

S'il vous plaît noter que:

Les types d'erreur suivants ne peuvent pas être traitées avec une fonction définie par l'utilisateur: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, et la plupart des E_STRICT élevé dans le fichier où set_error_handler() est appelé.

Extrait du manuel PHP.

+0

-1. Ce n'est pas une réponse. Je connais cette partie du manuel. Cela ne m'aide pas. – pltvs

+0

S'il vous plaît expliquer alors qu'est-ce que vous voulez faire? Cet exemple fonctionne bien. PHP lève une exception chaque fois qu'une erreur PHP survient. – donis

+1

Pardon? De quoi d'autre auriez-vous besoin? Vous avez demandé: * Comment puis-je lancer une exception sur chaque erreur d'application PHP? * Et je vous ai donné un extrait de code qui fait cela. J'ai également souligné que certaines erreurs ne peuvent pas être détectées avec un gestionnaire d'erreur en vous donnant une citation du manuel. –

4

Ma version:

function custom_error_handler($errno, $errstr, $errfile, $errline, $errcontext) 
{ 
    $constants = get_defined_constants(1); 

    $eName = 'Unknown error type'; 
    foreach ($constants['Core'] as $key => $value) { 
     if (substr($key, 0, 2) == 'E_' && $errno == $value) { 
      $eName = $key; 
      break; 
     } 
    } 

    $msg = $eName . ': ' . $errstr . ' in ' . $errfile . ', line ' . $errline; 

    throw new Exception($msg); 
} 

set_error_handler('custom_error_handler', E_ALL); 
+0

Merci, ça marche plutôt bien. – pltvs