2014-09-05 63 views
0

考虑这种情况下:“如果”与转让是一个很好的做法?

大型代码:

if($site->getUser($id)){ 
    $user = $site->getUser($id); 
    //more code here 
} 

短代码:

if($user = $site->getUser($id)){ 
    //already have the user 
    //more code here 
} 
在第一种情况下

,我做2次获得BBDD用于获取用户,但在第二只有一个... 第二种情况,是一种很好的做法?

+0

在第一种情况下,你调用的函数*** 2 ***倍(当时只有一次就够了),这就给了你你的答案:) – 2014-09-05 09:15:08

+0

我猜“正确”的短代码应该是'$ user = func(); if($ user){' – Sugar 2014-09-05 09:17:21

+0

是的,我对$ user = this_> getUser()更加满意。如果($ user){....} – 2014-09-05 09:30:12

回答

0

我更喜欢这个。

$user = $site->getUser($id); 
if($user){  
    //more code here 
} 

一般情况下,应避免条件分配。许多编程语言甚至不允许它。太容易犯错误。 它在可读性方面也更好。

+0

这样,对我来说,最清晰的是 – 2014-09-05 09:31:45

+0

为什么他们一般应该避免?赞成这种说法的理由是什么? – 2014-09-05 09:32:56

+0

正如我写的:错误/错误(confusing =和==)和可读性 – 2014-09-05 09:36:02

0

重复调用一个潜在的昂贵和/或有副作用的函数在任何情况下都不是一件好事,所以通常应避免使用第一个样本。如果该方法纯粹是一种不执行任何逻辑代码的被动getter方法,则可能出现异常情况;但是由于这个实现可能会改变,所以你应该避免它。

if ($foo = bar()) ... 

针对以上可以说,错别字混淆===并不少见,所以这可能会导致错误和/或受到不必要的混乱,未来开发商阅读代码。最少引起争议的方法应该是:

$foo = bar(); 
if ($foo) ... 

但是,有些人更喜欢将其缩短为if-assignment-in;这是一种文体选择。

0

是的,在我看来。 但是,我习惯于这样的代码。

if($user = ($site->getUser($id))){ 
    //already have the user 
    //more code here 
} 

警告这

if($flag = $usrType == $type)){ 
    //already have the user 
    //more code here 
}