我正在使用PHP 5.2.6.我希望方法中的参数有一个默认值,但似乎我有点太聪明了.
class属性blnOverwrite是默认的,可以在类的其他地方设置.我有一个方法,我想让它再次设置,但不能覆盖现有的值.我尝试这个时收到错误:
public function place( $path, $overwrite = $this->blnOverwrite ) { ... }
我必须这样做吗?
public function place( $path, $overwrite = NULL ) { 
    if ( ! is_null($overwrite) ) {
        $this->blnOverwrite = $overwrite;
    }
    ...
}
Gor*_*don 12
是的,你必须这样做.您不能将成员值用于默认参数值.
从函数的参数PHP手册:(重点煤矿)
函数可以为标量参数定义C++样式的默认值.[...] PHP还允许使用数组和特殊类型NULL作为默认值.[...] 默认值必须是常量表达式,而不是(例如)变量,类成员或函数调用.[...]请注意,使用默认参数时,任何默认值都应位于任何非默认参数的右侧; 否则,事情将无法按预期工作.
小智 10
你绝对可以做到这一点.两个世界中最好的:使用类常量初始化默认属性和方法的默认参数.
class Object {
    const DEFAULT_BLNOVERWRITE = TRUE;
    protected $blnOverwrite = self::DEFAULT_BLNOVERWRITE;
    public function place($path, $overwrite = self::DEFAULT_BLNOVERWRITE) {
        var_dump($overwrite);
    }
}
$Object = new Object();
$Object->place('/'); //bool(true)
| 归档时间: | 
 | 
| 查看次数: | 6400 次 | 
| 最近记录: |