6

我正在使用一个 php 应用程序,并且有一行移动文件。我将该方法包含在 try...catch 块中,因此,如果抛出错误,可以管理回滚系统。但是异常永远不会被捕获,所以,重命名会引发任何类型的异常?我需要尝试其他方法吗?

谢谢

上面的代码:

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

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

4 回答 4

8

“正常” PHP 函数不会抛出异常。

更改代码以模拟异常:

try{
   if(rename($archivo_salida, $ruta_archivos)){
      //anything;
   } else {
      throw new Exception('Can not rename file'.$archivo_salida);
   }
}catch (Exception $e)
   //do something
}
于 2012-05-15T19:23:05.833 回答
3

rename()只返回真/假 - 没有抛出异常。

http://php.net/manual/en/function.rename.php

于 2012-05-15T19:20:49.310 回答
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 {}在您调用此代码的块周围。

于 2012-05-15T19:20:57.850 回答
0

您也可以使用与此答案中所述相同的方法:https ://stackoverflow.com/a/43364340/563049

创建一个自定义异常类,并将其静态构造方法与oroperator 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()为 simple throw(),因为在 PHP 7 及更高版本中允许使用保留关键字作为方法名称。

于 2017-04-12T08:46:52.687 回答