我是PHP面向对象编程的初学者,我对PHP中处理错误的正确方法有一些疑问。
例如,请查看此函数:
public function deleteFileFromDisk($fileNameToBeDeleted) {
$handle = unlink($fileNameToBeDeleted);
if (!$handle) {
$result = "(this->deleteFileFromDisk) - Error, " . $fileNameToBeDeleted . " not deleted.";
} else {
$result = "(this->deleteFileFromDisk) - Success, " . $fileNameToBeDeleted . " deleted.";
}
return $result;
}这是正确的方法吗,或者我可以做得更好?
让我补充一些我正在实现的细节……
我正在运行类方法,并且我需要控制进程中的错误。如果对对象的任何调用抛出错误,我需要捕获它并发送一封电子邮件。
以下是对象交互:
$testar_classe = new geoIpImportCSV('geolitecity', 'http://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/');
$testar_classe->downloadAndSaveFile('./', $testar_classe->obtainDownloadFileName());
$testar_classe->uncompressZipFile($testar_classe->obtainDownloadFileName(), '.');
$testar_classe->deleteLine(1, 'GeoLiteCity-Location.csv');
$testar_classe->deleteLine(1, 'GeoLiteCity-Blocks.csv');
$testar_classe->deleteDataFromTable('tabela1');
$testar_classe->deleteDataFromTable('tabela2');
$testar_classe->insertLinesToDb('GeoLiteCity-Location.csv', 'tabela1');
$testar_classe->insertLinesToDb('GeoLiteCity-Blocks.csv', 'tabela2');
$testar_classe->deleteFileFromDisk($testar_classe->obtainDownloadFileName());
$testar_classe->deleteFileFromDisk('GeoLiteCity-Blocks.csv');
$testar_classe->deleteFileFromDisk('GeoLiteCity-Location.csv'); 处理这个问题的最好方法是什么?创建一个新的方法来处理异常?有没有关于如何做到这一点的例子?
诚挚的问候。
发布于 2010-12-22 22:13:39
您在这里所做的(返回一个字符串作为成功/失败指示符)确实不是一个好主意。问题是,这样的字符串只适用于呈现给人类;当您的代码需要知道是否存在故障以及如何处理时,它们对代码完全没有用处。
阅读以下相关问题:
发布于 2010-12-22 22:15:37
试着看看exceptions
public function deleteFileFromDisk($fileNameToBeDeleted) {
$handle = unlink($fileNameToBeDeleted);
if (!$handle) {
throw new Exception("(this->deleteFileFromDisk) - Error, " . $fileNameToBeDeleted . " not deleted.";
}
}然后在代码中:
try {
$object->deleteFileFromDisk('blabla');
}
catch (Exception $e) {
echo $e->message;
}发布于 2010-12-22 22:18:20
这种方法可能会给您带来一些令人头痛的问题。例如,如果你想以编程方式检测函数是否成功了呢?strpos()表示“错误”或“成功”?一些替代方案:
对于简单的成功/失败,
trigger_error()。https://stackoverflow.com/questions/4509972
复制相似问题