0

我有这个代码:

class foo
{
    public function __construct
    (
        $bar[var1]  = 0,
        $bar[var2]  = 0,
        $bar[var3]  = 0
    )
    {
        /* do something */
    }
}

我得到这个错误:

解析错误:语法错误,第 5 行$this中出现意外的 '[',期待 ')'

我不知道出了什么问题。

编辑:

我想像这样初始化类:$instance = new foo($bar) ($bar 是一个数组)

因为这个类需要很多参数,我可以很容易地从构造函数返回数组。如果这不是一个好主意,请告诉我。

4

5 回答 5

8

你为什么要在函数参数定义中创建一个数组?这是没有意义的,你不能这样做。

如果您想$bar成为参数但确保存在某些值(即默认值),请这样做:

public function __construct($bar)
{
    if(!isset($bar['var1'])) $bar['var1'] = 0;
    if(!isset($bar['var2'])) $bar['var2'] = 0;
    if(!isset($bar['var3'])) $bar['var3'] = 0;

    /* do something */
}

或更紧凑的方式:

public function __construct($bar)
{
    $bar = array_merge(array('var1' => 0, 'var2' => 0, 'var3' => 0), $bar);
    /* do something */
}
于 2012-04-26T08:46:45.337 回答
1
class foo
{
    public function __construct($bar = array())
    {
        $bar += array(
            "var1" => 0,
            "var2" => 0,
            "var3" => 0
        );

        /* do something */
    }
}
于 2012-04-26T08:47:07.753 回答
1
class foo
{
    public function __construct()
    {
        $bar = func_get_args();
    }
}
于 2012-04-26T08:47:56.070 回答
1

你不能这样做,你应该将数组作为一个整体传递。还必须引用键

public function __construct($bar)
    {
        $bar['var1']  = 0;
        $bar['var2']  = 0;
        $bar['var3']  = 0;

        /* do something */
    }
于 2012-04-26T08:48:20.580 回答
1
class foo
{
    public function __construct($bar = array('var'=>0, 'var2'=>0, 'var3'=>0))
    {
        var_dump($bar);
    }
}
于 2012-04-26T08:49:11.983 回答