我正在使用一个 php 应用程序,并且有一行移动文件。我将该方法包含在 try...catch 块中,因此,如果抛出错误,可以管理回滚系统。但是异常永远不会被捕获,所以,重命名会引发任何类型的异常?我需要尝试其他方法吗?
谢谢
上面的代码:
try{
if(rename($archivo_salida, $ruta_archivos)){
//anything;
}
}catch (Exception $e)
//do something
}
我正在使用一个 php 应用程序,并且有一行移动文件。我将该方法包含在 try...catch 块中,因此,如果抛出错误,可以管理回滚系统。但是异常永远不会被捕获,所以,重命名会引发任何类型的异常?我需要尝试其他方法吗?
谢谢
上面的代码:
try{
if(rename($archivo_salida, $ruta_archivos)){
//anything;
}
}catch (Exception $e)
//do something
}
“正常” PHP 函数不会抛出异常。
更改代码以模拟异常:
try{
if(rename($archivo_salida, $ruta_archivos)){
//anything;
} else {
throw new Exception('Can not rename file'.$archivo_salida);
}
}catch (Exception $e)
//do something
}
rename()
只返回真/假 - 没有抛出异常。
它FALSE
在失败时返回。见http://php.net/manual/en/function.rename.php
如果你真的需要在重命名失败时抛出异常,你可以这样做:
if (rename($archivo_salida, $ruta_archivos)) {
// anything;
} else {
throw new Exception("Rename failed.");
}
现在,您可以将它包装try {} catch {}
在您调用此代码的块周围。
您也可以使用与此答案中所述相同的方法:https ://stackoverflow.com/a/43364340/563049
创建一个自定义异常类,并将其静态构造方法与or
operator after一起使用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()
为 simplethrow()
,因为在 PHP 7 及更高版本中允许使用保留关键字作为方法名称。