0

Constant Contact からユーザーを削除する関数を作成しようとしています。この関数は、一定の連絡先のラッパー クラスを呼び出し、機能しますが、サイトに存在しない電子メール アドレスをフィードすると、キャッチ可能な致命的なエラーが返されます。

私は try/catch を初めて使用し、どこに配置すればよいかわかりません。これにより、取得している Catchable Fatal Error の代わりに適切なエラー メッセージを作成できます。以下は私の現在のコードです:

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 は、19 行目の [マイページへのパス] で呼び出され、214 行目の [定数連絡先 php ラッパー ファイルへのパス] で定義された、null が指定された Contact のインスタンスである必要があります

どんな助けでも大歓迎です!

4

1 に答える 1

1

これを行う正しい方法は、最初に 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?
}

try... 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
    }
}

一般的な注意事項として、例外を防止するために積極的に行動することが常に最善であり、単に事後に例外をキャッチするのではありません。私は、例外の可能性を防ぐために常に全力を尽くし、最後の可能な手段としてのみ try... catch を使用することを規則と見なす必要があるとさえ言います。

于 2011-08-31T13:56:59.663 に答える