处理不同参数类型的最简洁方法

时间:2013-06-02 19:13:06

标签: php coding-style arguments

我有以下代码,它生成六个下拉元素:

   for($i = 0; $i < 6; $i++)
    {
        $RelatedProductsHtmlList .= $this->getRelatedProductHtmlDropdown($Products[$i], $allAvailibleProducts, $i);
    }

在此代码中,传递参数$Products[$i],它是一个ORM对象,其中包含用于设置生成的下拉列表的默认选定值的信息。我有一个问题,$Products并不总是一个数组。有时只包含一个值,在这种情况下,它不是一个数组,而是一个ORM对象。

最干净的事是什么?将$Products转换为只包含一个元素的数组?如果它是一个数组,总是传递函数中确定的整个$Products变量吗?或者在调用函数之前确定$Products是否为数组并相应地设置函数参数?

2 个答案:

答案 0 :(得分:1)

您有两种选择:在调用方法之前或在方法本身内部修复它。

示例:

if(!is_array($products)) {
    $products = array($product));
}

如果您问我,我会将此代码添加到方法本身的顶部,因为这样可以简化函数调用并减少冗余代码。

答案 1 :(得分:0)

我建议允许将数组和单个对象传递给函数。您将避免在代码的不同部分进行多次检查。你可以这样做:

/**
@param array | ProductClass $Products
...
*/
public function getRelatedProductHtmlDropdown($Products, $allAvailibleProducts, $i)
{
    if (!is_array($Products)) $Products = array($Products);
    ....
}