我可以在PHP中使用class属性设置默认方法参数吗?

use*_*841 15 php default

我正在使用PHP 5.2.6.我希望方法中的参数有一个默认值,但似乎我有点太聪明了.

class属性blnOverwrite是默认的,可以在类的其他地方设置.我有一个方法,我想让它再次设置,但不能覆盖现有的值.我尝试这个时收到错误:

public function place( $path, $overwrite = $this->blnOverwrite ) { ... }
Run Code Online (Sandbox Code Playgroud)

我必须这样做吗?

public function place( $path, $overwrite = NULL ) { 
    if ( ! is_null($overwrite) ) {
        $this->blnOverwrite = $overwrite;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)