将类属性作为方法参数的值传递

时间:2013-05-07 11:32:10

标签: php oop

假设我有

class A {
    private $_property = 'string';

    public function method($property=$this->_property) {
        // ...
    }
}

它不允许我这样做。

我想这样做的原因是(也许是不好的做法,但仍然......):

  1. 我希望在此类的每个方法中,property的默认值为'string',但我不想public function method($property='string')因为如果我需要更改它,我必须在每一种方法

  2. 我想在实例化类并使用此方法时传递参数,所以最近我需要$class = new A(); $param = 'string2'; $class->method($param);

  3. 由于$_property是私有的,我无法更改其值

  4. 如果我这样做:

  5. class A {
        private $_property = 'string';
    
        public function method($property) {
            $property = $this->_property;
        }
    }
    

    它不允许我从外面改变参数。我的意思是,无论第2点的代码如何,它总是“字符串”。

    无论如何从第一个引用的代码中获得这一点,而不公开属性,既没有在方法内部分配,也没有赋予param的值?

3 个答案:

答案 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;
    }
}