首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的错误处理。该怎么做呢?

PHP中的错误处理。该怎么做呢?
EN

Stack Overflow用户
提问于 2010-12-22 22:08:49
回答 6查看 618关注 0票数 0

我是PHP面向对象编程的初学者,我对PHP中处理错误的正确方法有一些疑问。

例如,请查看此函数:

代码语言:javascript
复制
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;
}

这是正确的方法吗,或者我可以做得更好?

让我补充一些我正在实现的细节……

我正在运行类方法,并且我需要控制进程中的错误。如果对对象的任何调用抛出错误,我需要捕获它并发送一封电子邮件。

以下是对象交互:

代码语言:javascript
复制
$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'); 

处理这个问题的最好方法是什么?创建一个新的方法来处理异常?有没有关于如何做到这一点的例子?

诚挚的问候。

EN

回答 6

Stack Overflow用户

发布于 2010-12-22 22:13:39

您在这里所做的(返回一个字符串作为成功/失败指示符)确实不是一个好主意。问题是,这样的字符串只适用于呈现给人类;当您的代码需要知道是否存在故障以及如何处理时,它们对代码完全没有用处。

阅读以下相关问题:

票数 2
EN

Stack Overflow用户

发布于 2010-12-22 22:15:37

试着看看exceptions

代码语言:javascript
复制
public function deleteFileFromDisk($fileNameToBeDeleted) {

    $handle = unlink($fileNameToBeDeleted);

    if (!$handle) {
        throw new Exception("(this->deleteFileFromDisk) - Error, " . $fileNameToBeDeleted . " not deleted.";
    } 
}

然后在代码中:

代码语言:javascript
复制
try {
    $object->deleteFileFromDisk('blabla');
}
catch (Exception $e) {
    echo $e->message;
}
票数 2
EN

Stack Overflow用户

发布于 2010-12-22 22:18:20

这种方法可能会给您带来一些令人头痛的问题。例如,如果你想以编程方式检测函数是否成功了呢?strpos()表示“错误”或“成功”?一些替代方案:

对于简单的成功/失败,

  1. 返回布尔值true/false。当出现问题时,返回trigger_error()
  2. 返回一个特殊的错误容器类,类似于WP_Error,并检查函数的返回值是否为此类的实例。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4509972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档