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 のコードに関係なく、常に「文字列」です。

プロパティを公開せずに、メソッド内でパラメーターの値を割り当てずに、最初に引用されたコードからポイントを達成する方法はありますか?

4

3 に答える 3

4

パラメータのデフォルト値は、コンパイル時に評価する必要があるため、静的である必要があります。クラス プロパティstaticを作成する場合は、それを使用できますが、それは望ましくない場合があります。

最も簡単な方法はおそらく次のとおりです。

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

(PHP 5.3 の短縮?:演算子を使用します。)

于 2013-05-07T11:36:36.380 に答える
2

クラスで const を使用します。

class A {
    const _property = 'string';

    public function method($property = self::_property) {
        echo $property;
    }
}
于 2013-05-07T11:40:25.673 に答える
1

そのようなことをしてみてください:

Class A {

private $_property = 'string';

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

必要なものをシミュレートします。パラメータを送信しない場合、クラスからデフォルトのパラメータが取得されます。

于 2013-05-07T11:36:54.127 に答える