我有一个接受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
}

我唯一犹豫的是$glossary(bool或array)的类型是不可预测的。
只要我不违反一些最佳实践指导原则,我就不会感到困扰。
思想?

最佳答案

使用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
     }
 }

考虑到您基本上拥有一个状态(使用glossary或不使用glossary),用一个类封装它可能是一个好主意。

10-04 13:28