意外的'[',期待')' - 构造函数中的数组

时间:2012-04-26 08:45:49

标签: php

我有这段代码:

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

我收到此错误:

  

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

我不知道什么是错的。

修改

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

因为类会期望很多参数,所以我可以轻松地从构造函数返回数组。 如果这不是一个好主意,请告诉我。

5 个答案:

答案 0 :(得分: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 */
}

答案 1 :(得分:1)

class foo
{
    public function __construct($bar = array())
    {
        $bar += array(
            "var1" => 0,
            "var2" => 0,
            "var3" => 0
        );

        /* do something */
    }
}

答案 2 :(得分:1)

class foo
{
    public function __construct()
    {
        $bar = func_get_args();
    }
}

答案 3 :(得分:1)

你不能这样做你应该整个数组传递。还必须引用密钥

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

        /* do something */
    }

答案 4 :(得分:1)

class foo
{
    public function __construct($bar = array('var'=>0, 'var2'=>0, 'var3'=>0))
    {
        var_dump($bar);
    }
}