2013-05-03 46 views
0

我创建了一个主类,所有我的主要成员激活失活的功能是,所有与之相关的其他事情也做拥有更高效的代码返回

这个主类(包含一些重要的功能一起)错误从不同的地方,包括通过卷曲

现在让我activaton功能(其中一个主要的功能)在

activationFunction($data) 
{ 
//use data to generate total, discount etc 

$this->giveAffiliates($total); 
if($this->_error){ return $this->_error;} 

$this->activateOrder($total,$discount,id); 
if($this->_error){ return $this->_error;} 

$this->activatePlan($total,$discount,id); 
if($this->_error){ return $this->_error;} 

//similarily calling various functions which themselves call other functions 

} 

activatePlan() 
{ 

try{ 

//call other functions and do necessary stuff for plan A 

} 
catch(Exception $e) 
{ 

$this->_error.="Error occurred while activating plan A"; 

} 
//for plan B 
try{ 

//call other functions and do necessary stuff for plan B 

} 
catch(Exception $e) 
{ 

$this->_error.="Error occurred while activating plan B"; 

} 

//for other plans similarily 

} 
} 

现在的问题是每个子函数调用后有if($this->_error){ return $this->_error;}类(共我打电话一个m有大约35条这样的相似线) 我需要这个,因为我需要将错误发送给用户并阻止我的代码进一步运行。但它使我的代码长而且效率不高。 如何减少所有这些返回值,但在其中一个子函数失败时向用户显示错误,并尝试保留我的代码结构。 我必须调用每个主函数的各种子函数(这我不能改变,只有一个类和其中的各种函数),并且错误将主要在每个级别被捕获并返回(很少有简单的错误是没有返回并且代码被允许继续运行)。 我还必须记住,稍后可能会添加其他各种功能,并且它应该足够灵活,以便稍后处理所有内容。

+0

我不认为代码执行效率真的是这里的问题。代码可维护性/可读性。 – 2013-05-03 21:01:02

+0

是代码的可维护性/可读性肯定是一个问题,如果不是主要问题 – user1913849 2013-05-03 21:08:01

回答

2

您说“这会让我的代码变得很长而且效率不高。”你究竟是什么意思“不高效”?你是说你的代码很慢吗?

如果您的代码太慢,那么您需要使用类似XDebug这样的工具来分析您的代码,以准确找出您的代码的速度缓慢。如果你不测量,你只是猜测问题是什么。

+0

好吧,在每个函数看起来错误后,如果有错误存在,我想知道是否有更好的方法,然后检查35次是否有错误然后将错误发送给用户(我确信这样的代码不会被称为高效的,并且随着事情变得更加复杂并且稍后将其添加到它中,它肯定会使其变慢) – user1913849 2013-05-03 21:00:32

+1

“在我看来是错误的” ?你认为这需要很多时间吗?我敢打赌它没有。你需要测量才能知道。你正在做出很多猜测(“肯定会让它变慢”,“看起来错了”,“我确信这样的代码不会被称为高效的”),但是你需要使用一个工具来告诉你,如果你的猜测是正确的。否则,你会浪费你的时间来加速实际上并不慢的事情。 – 2013-05-03 21:02:29

+0

好吧用工具也可以测试它 – user1913849 2013-05-03 21:06:59

0

我认为每个函数都应该处理自己的错误/异常。这样你就不会将所有的错误处理全部推送到函数被调用的地方。函数的调用者不需要包含关于如何从被调用的函数生成错误通知的逻辑。

所以说你有每个函数在错误情况下抛出异常。你可以这样做:

activationFunction($data) 
{ 
    //use data to generate total, discount etc 
    try { 
    $this->giveAffiliates($total); 
    $this->activateOrder($total,$discount,id); 
    $this->activatePlan($total,$discount,id); 
    } catch (Exception $e) { 
    // throw the exception up the call chain 
    throw $e; 
    } 
} 
+0

但是让我们在activatePlan函数中说:我的计划updation没有给出任何错误,但是我的计划B给出了错误,我将如何确定计划B给出了更新错误,而不是计划它可能并不容易确定发生了什么错误,特别是如果同一个表得到更新,其差异很小 – user1913849 2013-05-03 21:06:08

+0

@ user1913849这就是您想要放入异常的所有消息。您可以在被调用的函数内根据需要进行特定操作,该函数将抛出异常以引发异常。您也可以创建自己的自定义异常类型,这些类型从基本异常继承(这实际上是一种很好的做法)。所以说你有一个数据库连接问题,你可以抛出一个DBException),或者如果你在读写文件系统时遇到问题,你可能会抛出一个IOException异常。如果你喜欢,你可以根据他们的类来处理捕捉到的异常。 – 2013-05-03 21:07:57

+0

我不能用“throw $ e;”因为当我从不同的地方调用这个类并通过curl执行所有的东西并以json格式返回数据时,它会发出各种错误。我必须将它存储在一个变量中,然后返回该变量。另外,根据具体的消息返回消息返回后,从调用者文件运行的特定代码 – user1913849 2013-05-03 21:12:10