2013-05-07 13 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; 
    } 
}