2012-08-12 18 views
5

Tengo una situación en la que sería bueno poder tener un bloque catch donde se determine el tipo de excepción en tiempo de ejecución. Funcionaría algo como esto:PHP: Bloques de captura dinámicos o programáticos

$someClassName = determineExceptionClass(); 

try { 
    $attempt->something(); 
} catch ($someClassName $e) { 
    echo 'Dynamic Exception'; 
} catch (Exception $e) { 
    echo 'Default Exception'; 
} 

¿Es esto posible?

+0

¿Por qué tendría que hacer eso? – Vulcan

+0

Estoy trabajando en una especie de biblioteca y quiero que el usuario proporcione la clase que se usa para la excepción. – macinjosh

Respuesta

5

Eso no funciona hasta donde yo sepa. Podría imitar esa funcionalidad con una instrucción de control como esta:

$someClass = 'SomeException'; 

try 
{ 
    $some->thing(); 
} 
catch (Exception $e) 
{ 
    switch (get_class($e)) 
    { 
     case $someClass: 
      echo 'Dynamic exception.'; 
      break; 
     default: 
      echo 'Normal exception.'; 
    } 
} 
+0

No es tan elegante como mi primera idea pero funciona igual. ¡Gracias! – macinjosh

Cuestiones relacionadas