我正在尝试创建一个函数来删除用户与常量联系人的联系。这个函数调用一个包装类来保持常量的联系,并且它可以工作,但是如果你给它一个不存在于他们网站上的电子邮件地址,它会返回一个可捕捉的致命错误。
我是第一次尝试/捕捉,而且我还不太清楚该把它放在哪里,这样我就可以创建一个优美的错误消息,而不是我正在得到的可捕捉的致命错误。下面是我的当前代码:
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::
Contact ()的参数1必须是联系人的实例,空给定,在第19行的路径中调用,并在第214行中定义为常量联系人包装文件
任何帮助都是非常感谢的!
发布于 2011-08-31 13:56:59
正确的方法是首先测试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?
}试着..。抓住,你可能会让它看起来像这样:
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
}
}一般说来,最好是主动采取行动,防止出现例外情况,而不是简单地在事后抓住它们。我甚至要说,你应该把尽你所能的一切都当作一条规则,以防止出现异常的可能性,并且只使用.作为最后一种可能的手段来抓。
https://stackoverflow.com/questions/7257908
复制相似问题