假设我有
class A {
private $_property = 'string';
public function method($property=$this->_property) {
// ...
}
}
它不允许我这样做。
我想这样做的原因是(也许是不好的做法,但仍然......):
我希望在此类的每个方法中,property的默认值为'string',但我不想public function method($property='string')
因为如果我需要更改它,我必须在每一种方法
我想在实例化类并使用此方法时传递参数,所以最近我需要$class = new A(); $param = 'string2'; $class->method($param);
由于$_property
是私有的,我无法更改其值
如果我这样做:
class A {
private $_property = 'string';
public function method($property) {
$property = $this->_property;
}
}
它不允许我从外面改变参数。我的意思是,无论第2点的代码如何,它总是“字符串”。
无论如何从第一个引用的代码中获得这一点,而不公开属性,既没有在方法内部分配,也没有赋予param的值?
答案 0 :(得分:3)
参数默认值需要是静态的,因为它们需要在编译时进行评估。如果您创建了类属性static
,则可以使用它,但这可能不是您想要的。
最简单的方法可能是:
public function method($property = null) {
$property = $property ?: $this->_property;
...
}
(使用PHP 5.3的简写?:
运算符。)
答案 1 :(得分:1)
尝试做类似的事情:
Class A {
private $_property = 'string';
public function method($property=null) {
if($property == null)
$property = $this->_property;
}
它将模拟您的需求。当你不发送任何参数时,它将从你的班级中取默认值。
答案 2 :(得分:1)
我会在班上使用const:
class A {
const _property = 'string';
public function method($property = self::_property) {
echo $property;
}
}