0

我对 PHP 比较陌生,并且已经进行了广泛的搜索,但无法完全找出解决我的问题的方法。

我试图弄清楚如何在一个类中使用设置器,其中设置的变量是一个未知大小的数组。例如:

class Shirt 
{   
    private $sizes=array();

    public function setSizes($x) 
    {
        $this->sizes=array($x);
    }

}

$BlueShirt = new Shirt;
$BlueShirt -> setSizes (12,14,16);

上面的代码只会设置 $BlueShirt 对象中声明的第一个尺寸。在某些情况下,衬衫对象将有 3 种尺寸,其他可能有 3 或 4 种,而另一些可能只有 1 种。我知道一个简单的解决方案是在对象中声明 array():

class Shirt 
{      
    private $shirts;

    public function setShirt($x); 
    {
        $this->shirts=($x);
    }
}

$BlueShirt = new Shirt;
$BlueShirt -> setShirt(array(12,14,16));

但是,我真的不想走那条路。我在返回大小范围等的其他函数中使用此初始大小数据。这些函数要求大小数据为数组形式。我宁愿强制数组,因为即使有明确的注释,对于未来的用户添加对象可能并不明显,只有一种大小的对象仍应作为数组输入。

感谢您提前提供任何帮助。

4

2 回答 2

2

关于什么 :

class Shirt {

    private $sizes=array();

    public function setSizes() {
        $this->sizes=func_get_args();
    }

}

$BlueShirt = new Shirt;
$BlueShirt -> setSizes (12,14,16);

func_get_arg() 获取传递给函数的所有参数。但我不明白为什么你不想直接给函数一个数组。

于 2013-05-16T19:32:10.193 回答
2

数组的大小在 PHP 中无关紧要,它们可以是任意大小并且可以根据需要增长。因此,您的问题标题实际上没有意义。我怀疑您想要做的是确保始终将数组传递给您的setSizes()函数。

您可以使用类型提示将参数强制为数组:-

class Shirt 
{
    private $sizes=array();

    public function setSizes(array $x) 
    {
        $this->sizes = $x;
    }
}

    $BlueShirt = new Shirt();
    $BlueShirt->setSizes(array(12,14,16));

然后,如果您错误地尝试传递标量,您将收到来自 IDE 的警告,如果您尝试运行代码,则会收到运行时错误。

您还可以测试一个数组并在未通过时创建一个:-

class Shirt 
{
    private $sizes=array();

    public function setSizes($x) 
    {
        if(is_array($x){
            $this->sizes = $x;
        } else {
           $this->sizes = array($x);
    }
}

    $BlueShirt = new Shirt();
    $BlueShirt->setSizes(12); //Shirt::sizes will still be an array.
于 2013-05-16T19:35:16.957 回答