2013-05-07 56 views
0

比方说,我有通行证类属性值的方法参数

class A { 
    private $_property = 'string'; 

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

它不会让我这样做。

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

  1. 我想要的属性的默认值在本类中的每个方法是“串”,但我不想public function method($property='string'),因为如果我需要改变它,我必须这样做,在每一个方法

  2. 我要传递的参数初始化类,以及使用这种方法的时候,所以我最近需要$class = new A(); $param = 'string2'; $class->method($param);

  3. 由于$_property是私人的,我不能改变它的值

  4. 如果我做的:

class A { 
    private $_property = 'string'; 

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

这并不让我帕拉姆从外部改变。我的意思是,无论来自第2点的代码如何,它总是'字符串'。

有没有办法从第一个引用的代码中实现该点,而不会将该属性设为公共,既不分配内部方法, PARAM?

回答

3

参数缺省值需要是静态的,因为它们需要在编译时进行评估。如果你想让课程属性static可以使用它,但这可能不是你想要的。

最简单的方法可能是:

public function method($property = null) { 
    $property = $property ?: $this->_property; 
    ... 
} 

(使用PHP 5.3的简写?:运营商。)

+0

我真的很喜欢这个解决方案。谢谢! :) – 2013-05-07 11:54:05

1

尝试做这样的事情:

Class A { 

private $_property = 'string'; 

public function method($property=null) { 
    if($property == null) 
     $property = $this->_property; 
} 

它将模拟一下你需要。当你不发送任何参数时,它将采用你班级的默认参数。

+0

好的,谢谢:) – 2013-05-07 11:54:36

1

我会在我的课堂上使用一个常量:

class A { 
    const _property = 'string'; 

    public function method($property = self::_property) { 
     echo $property; 
    } 
}