PHP使用$ this->变量作为类方法参数默认值

时间:2013-01-31 21:57:07

标签: php class variables default

好的,所以这似乎是一个非常愚蠢的问题,但PHP告诉我我不能这样做,或者说我的IDE ...

在下面的示例中,它告诉我我不能使用$ this-> somevar作为方法的默认值。

即...

class something {

public somevar = 'someval';

private function somefunc($default = $this->somevar) {

}



}

3 个答案:

答案 0 :(得分:18)

我担心你的IDE是正确的。这是因为“默认值必须是常量表达式,而不是(例如)变量,类成员或函数调用。” - Function arguments

你需要做这样的事情:

class something {

    public somevar = 'someval';

    private function somefunc($default = null) {
        if ($default === null) {
            $default = $this->somevar;
        }
    }
}

答案 1 :(得分:5)

  

“[函数参数]的默认值必须是常量表达式,而不是(例如)   变量,类成员或函数调用。“

http://php.net/manual/en/functions.arguments.php

答案 2 :(得分:0)

在这种情况下,您可以使用我的小型库ValueResolver,例如:

class something {

    public somevar = 'someval';

    private function somefunc($default = null) {
        $default = ValueResolver::resolve($default, $this->somevar); // returns $this->somevar value if $default is empty
    }
}

并且不要忘记使用命名空间use LapaLabs\ValueResolver\Resolver\ValueResolver;

还可以进行类型转换,例如,如果变量的值应该是integer,那么请使用:

$id = ValueResolver::toInteger('6 apples', 1); // returns 6
$id = ValueResolver::toInteger('There are no apples', 1); // returns 1 (used default value)

查看docs了解更多示例