3

我有一个接受checkGlossarybool 参数和可选glossary数组的函数。
他们的状态直接联系在一起。如果 bool 为 FALSE,则永远
不需要 词汇表,反之,如果 bool 为 TRUE,则始终需要词汇表。

对我来说,这似乎可以很容易地简化为:

// Current
function doSomething($param1, $param2, $checkGlossary=FALSE, $glossary=NULL){
    // blah blah blah
    if($checkGlossary)
        array_search($glossary[$param2]);
    // etc etc etc
}

... 到:

// Proposed
function doSomething($param1, $param2, $glossary=FALSE){
    // blah blah blah
    if($glossary)
        array_search($glossary[$param2]);
    // etc etc etc
}


我唯一的犹豫是$glossaryboolarray)的类型是不可预测的。
只要我不违反一些最佳实践指南,它就不会打扰我。

想法?

4

2 回答 2

2

您可以使用is_array()andis_bool()来检查它的类型!

于 2013-03-06T23:00:38.873 回答
2

使用 PHP 称为数据类型的函数参数总是一个坏主意mixed。它需要在函数中添加额外的代码来检查参数的类型,显然它会变得非常混乱。

在您的特殊情况下,最简单的解决方案可能是使用数组长度作为是否使用词汇表代码的指标。您需要一种方法来声明不应使用词汇表数组。所以你应该问自己:什么时候使用词汇表是没有意义的?当然是空的时候。因此,我建议您摆脱该标志并将array()其他参数定义为默认值:

function doSomething($param1, $param2, $glossary=array()) {
    if (count($array) > 0) {
        // do your glossary code here
    }
    // all the other stuff goes here
}

对我来说,这在语义上似乎是正确的并且工作得很好。

我不知道你在那里构建什么,但另一种解决方案是将它们全部放入一个类中并将词汇表作为实例变量。如果您可以在多个函数调用中使用词汇表。它大致看起来像这样:

 public class SomeAccurateClassName {
     private $glossary = array();

     function setGlossary(array $glossary) {
         $this->glossary = $glossary;
     }

     function doSomething($param1, $param2) {
         if (count($array) > 0) {
             // do your glossary code here
         }
         // all the other stuff goes here
     }
 }

考虑到您基本上有一个状态(使用词汇表或不使用词汇表),将其封装在一个类中可能是个好主意。

于 2013-03-07T07:04:19.083 回答