2013-05-03 63 views
0

这或多或少是可读性,可维护性和/或最佳实践类型问题。从函数中的多个点返回

我想获得关于某事的意见。 return从一个函数中的多个点是不好的练习?例如。

<?php 

    // $a is some object 

    $somereturnvariable = somefunction($a); 

    if ($somereturnvariable !== FALSE) { 
     // do something here like write to a file or something 
    } 

    function somefunction($a) { 
     if (isset($a->value)) { 
       if ($a->value > 2) { 
        return $a->value; 
       } else { 
        return FALSE; 
     } else { 
       // returning false because $a->value isn't set 
       return FALSE; 
     } 
    } 
    ?> 

还是应该是这样的:

<?php 

    // $a is some object 

    $somereturnvariable = somefunction($a); 

    if ($somereturnvariable !== false) { 
     // do something here like write to a file or something 
    } 

    function somefunction($a) { 
     if (isset($a->value)) { 
       if ($a->value > 2) { 
        return $a->value; 
       } 
     } 

     return FALSE 
    } 
    ?> 
+0

在这种情况下,我会选择第二个版本,因为它更具可读性。当然,如果你需要返回两个以上的可能值,第二种方式是不可能的。 – 2013-05-03 18:34:18

+0

看起来像一个伟大的[codereview](http://codereview.stackexchange.com/)问题... – 2013-05-03 18:36:48

+0

真的...但比我必须创建另一个用户名,必须去多个网站的问题...艾因没有任何机构为此付出时间。 – 2013-05-03 18:41:24

回答

1

作为一个实践问题,我总是试图从一个点中的任何功能,这通常是最后一点回来。我将它存储在一个变量中,如$retVal,并将其返回到函数的最后。它使代码看起来更加健全。

话虽如此,有些情况下说,在你的函数作为第一行,你检查var是否为空,如果是,你是返回。在这种情况下,没有必要持有该变量,然后添加额外的检查以跳过所有函数代码,最终返回该函数。

因此......总之,两种方式都有效。它总是取决于情况是什么以及你更容易接受什么。

+0

plus,之前返回意味着如果它已被评估为true,则不需要在返回值下面处理代码。 – reikyoushin 2013-05-03 18:41:10

+0

@reikyoushin:的确如此。在较长的代码中,它只是一种浪费,并且会使得函数变得杂乱无章。 – raidenace 2013-05-03 18:42:02

+0

对我来说听起来不错。我只是发现自己在不同的项目中以不同方式编写类似的风格功能。或多或少取决于我当时的心情。我想结束内部辩论:D – 2013-05-03 18:43:22