2012-05-15 30 views
5

Tôi đang làm việc với ứng dụng php và có một dòng di chuyển tệp. Tôi kèm theo các phương pháp trong một thử ... bắt khối như vậy, nếu một lỗi được ném, có thể quản lý một hệ thống rollback. Nhưng ngoại lệ là không bao giờ bị bắt, vì vậy, đổi tên ném bất kỳ loại ngoại lệ? Tôi có cần thử phương pháp khác không?Đổi tên PHP() không ném ngoại lệ về lỗi

Cảm ơn

Mã trên:

try{ 
    if(rename($archivo_salida, $ruta_archivos)){ 
    //anything; 
    } 

}catch (Exception $e) 
    //do something 
} 

Trả lời

6

Chức năng PHP "bình thường" không ném ngoại lệ.

Thay đổi mã của bạn để mô phỏng một ngoại lệ:

try{ 
    if(rename($archivo_salida, $ruta_archivos)){ 
     //anything; 
    } else { 
     throw new Exception('Can not rename file'.$archivo_salida); 
    } 
}catch (Exception $e) 
    //do something 
} 
+0

xấu của tôi. cảm ơn! – Cheluis

+0

Có thể có một biến áp Lỗi ngoại lệ tự động: http://stackoverflow.com/a/10919969/22470 – powtac

2

Nó trả FALSE trên thất bại. Xem http://php.net/manual/en/function.rename.php

Nếu bạn thực sự cần một ngoại lệ được ném khi đổi tên thất bại, bạn có thể làm điều này:

if (rename($archivo_salida, $ruta_archivos)) { 
    // anything; 
} else { 
    throw new Exception("Rename failed."); 
} 

Bây giờ, bạn có thể bọc này xung quanh một khối try {} catch {} cứ nơi nào bạn đang gọi mã này.

+0

cảm ơn! giống như một câu trả lời nhưng cảm ơn – Cheluis

0

Bạn cũng có thể sử dụng phương pháp tương tự như mô tả trong câu trả lời này: https://stackoverflow.com/a/43364340/563049

Tạo một lớp ngoại lệ tùy chỉnh và sử dụng nó là phương pháp constructor tĩnh với or nhà điều hành sau rename().

lớp

Ngoại lệ:

class CustomException extends Exception { 
    static public function doThrow($message = "", $code = 0, Exception $previous = null) { 
    throw new Exception($message, $code, $previous); 
    } 
} 

Cách sử dụng:

try { 

    rename($archivo_salida, $ruta_archivos) or CustomException::doThrow('Renaming failed.'); 

} catch (Exception $e){ 
    //do something 
} 

Note

Nếu bạn đang sử dụng PHP 7 trở lên - bạn có thể đổi tên phương pháp tĩnh doThrow() chỉ đơn giản là throw() , vì trong PHP 7 trở lên, nó được phép sử dụng từ khóa dành riêng làm tên phương thức.

Các vấn đề liên quan