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

时间:2010-09-29 15:18:19

标签: php default

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

类属性blnOverwrite是默认的,可在类中的其他位置设置。我有一个方法,我想让它再次设置,但不能覆盖现有的值。我尝试这个时出错:

public function place( $path, $overwrite = $this->blnOverwrite ) { ... }

我必须这样做吗?

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

4 个答案:

答案 0 :(得分:12)

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

From the PHP manual on Function arguments:强调我的

  

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

答案 1 :(得分: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)

答案 2 :(得分:3)

你必须这样做,afaik,或者从php 5.3开始使用类常量,但当然它是固定的,不能在以后更改,所以我肯定会使用你自己的解决方案:

class foo{
    const constant = 'bar';

    public function place($path, $overwrite = self::constant ) { 
        die('bla' . $overwrite);
    }
}

$bar = new foo();
$bar->place('baz');

答案 3 :(得分:0)

你可以稍微缩短一点:

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

但那几乎相同