Php 处理不同参数类型的最干净方法

Php 处理不同参数类型的最干净方法,php,coding-style,arguments,Php,Coding Style,Arguments,我有以下代码,它生成六个下拉元素: for($i = 0; $i < 6; $i++) { $RelatedProductsHtmlList .= $this->getRelatedProductHtmlDropdown($Products[$i], $allAvailibleProducts, $i); } ($i=0;$igetRelatedProductHtmlDropdown($Products[$i],$allavailablepro

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

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

{
$RelatedProductsHtmlList.=$this->getRelatedProductHtmlDropdown($Products[$i],$allavailableproducts,$i);
}
在这段代码中,传递了参数
$Products[$i]
,这是一个ORM对象,包含用于设置生成的下拉列表的默认选定值的信息。我的问题是,
$Products
并不总是一个数组。有时只包含一个值,在这种情况下,它不是数组,而是单个ORM对象


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

您有两个选项:在调用方法之前修复它,或者在方法本身内部修复它

例如:

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

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

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

例如:

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

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

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

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

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

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

真正的解决方法是修复生成
$products
的代码,以便始终返回数组,而api根据大小返回不同的数据类型,这是一种糟糕的设计。我同意。然而,我使用PHP activerecord作为ORM,这给了我这种行为。真正的解决方法是修复生成
$products
的代码,以始终返回数组,使用api根据大小返回不同的数据类型是不好的设计。我同意。然而,我使用PHP activerecord作为ORM,这给了我这种行为。