是否可以在 PHP 中设置具有类属性的默认方法参数?

2022-08-30 22:08:34

我使用的是 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;
    }
    ...
}

答案 1

是的,你必须这样做。不能将成员值用作默认参数值。

来自 PHP 手册中的函数参数:强调我的)

函数可以为标量参数定义C++样式的默认值。[...]PHP 还允许使用数组和特殊类型 NULL 作为默认值。[...]默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。[...]请注意,使用默认参数时,任何默认值都应位于任何非默认参数的右侧;否则,事情将无法按预期工作。


答案 2

你绝对可以做到这一点。两全其美:使用类常量初始化默认属性和方法的默认参数。

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)

推荐