11

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

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

IE...

class something {

public somevar = 'someval';

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

}



}
4

3 回答 3

21

恐怕您的IDE是正确的。这是因为“默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用”。—函数参数

你需要做这样的事情:

class something {

    public $somevar = 'someval';

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

这也可以使用三元运算符编写:

$default = $default ?: $this->somevar;
于 2013-01-31T22:00:45.093 回答
5

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

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

于 2013-01-31T21:58:38.437 回答
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)

查看文档以获取更多示例

于 2015-07-09T10:44:43.210 回答