PHP错误消息帮助和Try/Catch

PHP错误消息帮助和Try/Catch,php,try-catch,constantcontact,Php,Try Catch,Constantcontact,我正在尝试创建一个函数,该函数将用户从持续联系人中删除。这个函数调用一个包装类来保持联系,它可以工作,但是如果你给它一个在他们的站点上不存在的电子邮件地址,它会返回一个可捕获的致命错误 我是一个新的尝试/捕捉者,我还不太清楚该放在哪里,这样我就可以创建一个优雅的错误消息,而不是我得到的可捕捉的致命错误。以下是我目前的代码: function ccdeleteuser($emailaddress) { //this code accesses the constant contact wrappe

我正在尝试创建一个函数,该函数将用户从持续联系人中删除。这个函数调用一个包装类来保持联系,它可以工作,但是如果你给它一个在他们的站点上不存在的电子邮件地址,它会返回一个可捕获的致命错误

我是一个新的尝试/捕捉者,我还不太清楚该放在哪里,这样我就可以创建一个优雅的错误消息,而不是我得到的可捕捉的致命错误。以下是我目前的代码:

function ccdeleteuser($emailaddress)
{
//this code accesses the constant contact wrapper class to delete a user based on email
$ConstantContact = new ConstantContact("basic", "apikey", "usr", "pwd");
$SearchContact = $ConstantContact->searchContactsByEmail($emailaddress);
$DeleteContact = $ConstantContact->deleteContact($SearchContact[0]);  
}

$emailtotry = "test@test.com";  //this is email is NOT in Constant Contact
ccdeleteuser($emailtotry);
现在,如果我运行此命令,会出现以下错误:

可捕获的致命错误:传递给ConstantContact::deleteContact()的参数1必须是Contact的实例,给定null,在第19行的[path to my page]中调用,并在第214行的[path to constant Contact php包装文件]中定义


感谢您的帮助

正确的方法是首先测试null:

function ccdeleteuser($emailaddress)
{

    $ConstantContact = new ConstantContact("basic", "apikey", "usr", "pwd");
    $SearchContact = $ConstantContact->searchContactsByEmail($emailaddress);
    // first makes sure that the 0 index of of SearchContact is accessible at all
    // then it ensures that only something "truthy" will trigger delete -- this
    // means that if $SearchContact[0] is null, the function won't try to delete
    if( $SearchContact && isset( $SearchContact[0] ) && $SearchContact[0])
        $DeleteContact = $ConstantContact->deleteContact($SearchContact[0]);  
    else
        echo "Can't do nothin'"; // do something useful?
}
试试看。。。catch,你可以让它看起来像这样:

function ccdeleteuser($emailaddress)
{

    $ConstantContact = new ConstantContact("basic", "apikey", "usr", "pwd");
    $SearchContact = $ConstantContact->searchContactsByEmail($emailaddress);
    try
    {
        // keep this... it is still useful
        if( $SearchContact && isset( $SearchContact[0] ) && $SearchContact[0])
            $DeleteContact = $ConstantContact->deleteContact($SearchContact[0]);  
        else
            echo "Can't do nothin'";
    }
    catch( Exception $e )
    {
        // I'm making up a function "log" which will record that an error 
        // has taken place. It is a good idea to always log all exceptions
        // so that you don't accidentally obfuscate something important
        log( $e->getMessage() );
        // do something useful
    }
}

一般来说,最好是主动采取行动防止异常,而不是事后简单地捕获异常。我甚至会说,你应该认为这是一个规则,总是尽你的能力,以防止可能的例外,只使用尝试…最后一种可能的方法是捕获。

您应该首先检查
$SearchContact
是否为数组;那么你就不必担心例外了。杜普:谢谢你的回答,第一个很好用!这是其中一种情况,在这种情况下,你对“尝试并抓住”的想法太过空洞,以至于忘记了有一种更简单(更有效)的方法!