2009-05-31 26 views
32

Entiendo lo que hacen las declaraciones try-catch, pero al leer la documentación en php.net, no podría implementar una en mi propio código. Necesito un ejemplo real para ayudarme a entender.prueba catch statement en PHP donde el archivo no carga

¿Cómo puedo convertir este ejemplo en una declaración try catch, si la carga no fue exitosa?

$move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']); 

if (!$move) { 
    die ('File didn't upload'); 
} else {    
    //opens the uploaded file for extraction 
    echo "Upload Complete!"; 
} 

Puede que este no sea un buen ejemplo para trabajar, pero cualquier ayuda sería apreciada.

+0

ver también: http://stackoverflow.com/questions/1087365 – dreftymac

Respuesta

48

Podrías hacerlo así.

try { 
    //throw exception if can't move the file 
    if (!move_uploaded_file(...)) { 
     throw new Exception('Could not move file'); 
    } 

    //do some more things with the file which may also throw an exception 
    //... 

    //ok if got here 
    echo "Upload Complete!"; 
} catch (Exception $e) { 
    die ('File did not upload: ' . $e->getMessage()); 
} 

Es un poco inútil para el ejemplo anterior, pero debe hacerse una idea. Tenga en cuenta que puede lanzar la (s) excepción (es) desde cualquier lugar (por ejemplo, dentro de una función/método al que llama desde el try {}) y se propagarán hacia arriba.

+1

Gracias por su respuesta y la respuesta! Entiendo que este no fue un gran ejemplo. ¿Cuándo sería adecuado usar una excepción? ¡Gracias! –

+0

No adelgazo, hay buenos o malos ejemplos. Las declaraciones Try/Catch son útiles cuando son útiles. Lo único que debe importar es que php arrojará E_ERROR o E_WARNING cuando se use indebidamente una función. –

8

Bueno, si desea utilizar excepciones, usted podría hacer algo como:

function handleUpload() { 


    $move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']); 

    if (!$move) { 
     throw new Exception('File Didnt Upload'); 
    } 

} 

try { 
    handleUpload(); 
    echo "File Uploaded Successfully"; 
} catch(Exception $ex) { 
    die($ex->getMessage); 
} 

Sé que esto puede parecer como hinchazón - pero se puede llamar al método desde cualquier lugar de la pila de llamadas, y coger el excepción en cualquier punto.

+1

Solo una nota, que el manejo de excepciones es mucho más útil si tiene una jerarquía de clases para sus excepciones. En general, es útil utilizar la captura con subclases de excepción específicas, y de esta manera puede elegir qué problemas se manejan en qué nivel del código. –

6

try-catch declaraciones se utilizan para manejar excepciones. No creo que la función move_uploaded_files pueda arrojar y la excepción, como tal, creo que su código está escrito es correcto. Después de la llamada, miras el código de retorno. Si es falso, finaliza el procesamiento; de lo contrario, tendrá éxito.

+1

Su ejemplo es correcto, pero creo que el punto es que está tratando de aprender sobre excepciones en lugar de tratar de corregir/mejorar el código de muestra. –

+0

¡Gracias a todos por sus respuestas rápidas! Este parece no ser el mejor ejemplo para aprender. ¿Cuándo sería un buen/correcto momento para usar una Excepción? –

3

Según una publicación similar en PHPbug, solo el código OO (código orientado a objetos) arroja excepciones. Eso significaría que funciones como move_uploaded_file no arrojarán sus propias excepciones, pero algún otro código lo hará.

2

Encontré this provechoso.

Un buen ejemplo de la aplicación de manejo de excepciones y try catch things es here.

0

usted tiene que tomar un vistazo en [Excepción Buenas Prácticas en PHP 5.3] [1]

El manejo de excepciones en PHP no es una nueva característica de cualquier tramo. En el siguiente enlace, verá dos nuevas características en PHP 5.3 basadas en excepciones. La primera son las excepciones anidadas y la segunda es un nuevo conjunto de tipos de excepción ofrecidos por la extensión SPL (que ahora es una extensión principal del tiempo de ejecución de PHP). Ambas características nuevas se han introducido en el libro de las mejores prácticas recomendadas y merecen ser examinadas en detalle.

http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3