我正在使用php应用程序,并且有一行移动文件。我将该方法包含在try ... catch块中,因此,如果抛出错误,则可以管理回滚系统。但是异常永远不会被捕获,因此,重命名会引发任何异常?我需要尝试其他方法吗?
由于
以上代码:
try{
if(rename($archivo_salida, $ruta_archivos)){
//anything;
}
}catch (Exception $e)
//do something
}
答案 0 :(得分:7)
“正常”PHP函数不会抛出异常。
更改代码以模拟异常:
try{
if(rename($archivo_salida, $ruta_archivos)){
//anything;
} else {
throw new Exception('Can not rename file'.$archivo_salida);
}
}catch (Exception $e)
//do something
}
答案 1 :(得分:3)
rename()
只返回true / false - 没有抛出异常。
答案 2 :(得分:2)
失败时返回FALSE
。见http://php.net/manual/en/function.rename.php
如果在重命名失败时确实需要抛出异常,则可以执行以下操作:
if (rename($archivo_salida, $ruta_archivos)) {
// anything;
} else {
throw new Exception("Rename failed.");
}
现在,您可以在try {} catch {}
块周围将其包装在您调用此代码的位置。
答案 3 :(得分:0)
您还可以使用与此答案中所述相同的方法:https://stackoverflow.com/a/43364340/563049
创建自定义异常类,并在or
之后使用rename()
运算符使用它的静态构造方法。
异常类:
class CustomException extends Exception {
static public function doThrow($message = "", $code = 0, Exception $previous = null) {
throw new Exception($message, $code, $previous);
}
}
用法:
try {
rename($archivo_salida, $ruta_archivos) or CustomException::doThrow('Renaming failed.');
} catch (Exception $e){
//do something
}
注意强>
如果您使用的是PHP 7及更高版本 - 您可以将静态方法
doThrow()
重命名为throw()
,因为在PHP 7及更高版本中,它允许使用保留关键字作为方法名称。