好的,所以这似乎是一个非常愚蠢的问题,但PHP告诉我我不能这样做,或者说我的IDE ...
在下面的示例中,它告诉我我不能使用$ this-> somevar作为方法的默认值。
即...
class something {
public somevar = 'someval';
private function somefunc($default = $this->somevar) {
}
}
答案 0 :(得分:18)
我担心你的IDE是正确的。这是因为“默认值必须是常量表达式,而不是(例如)变量,类成员或函数调用。” - Function arguments
你需要做这样的事情:
class something {
public somevar = 'someval';
private function somefunc($default = null) {
if ($default === null) {
$default = $this->somevar;
}
}
}
答案 1 :(得分:5)
“[函数参数]的默认值必须是常量表达式,而不是(例如) 变量,类成员或函数调用。“
答案 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了解更多示例