0

どの方法がベストプラクティスと見なされているのか、その理由は何ですか?

関数を持っているので、渡されたものは何でも取得しようとします。

class Test{

    private $first = 'first';
    private $second = 'second';

    public function data($what){
        return $this->{strtolower($what)};
    }

}

またはオプションの固定セットを持つ:

class Test{

    private $first = 'first';
    private $second = 'second';

    public function data($what){
        switch(strtolower($what)){
            case 'first':
                $value = $this->first;
                break;
            case 'second':
                $value = $this->second;
                break;
            default:
                $value = null;
        }
        return $value;
    }

}

最初のオプションを使用すると、クラスに新しいメンバーを追加するたびに関数を変更する必要がなくなりますが、クラス メンバーを持てなくなることも意味しprivateます。

2 番目のオプションを使用するということは、新しいメンバーを追加するたびに関数を変更する必要があることを意味します。

最初の方法では、特定のメンバーに特別な処理を追加したい場合、それらのメンバーに if ステートメントを追加するだけです。

2 番目の方法では、case ステートメント内で処理を行うことができます。

4

2 に答える 2

1

確かに、コードはオブジェクトから何を推定するかを知る必要があります。動的であることは良くありません。具体的であることは、コードの記述がだらしないことではありません。それは、その行動の結果について考えるために頭脳を使ったことを意味します。

于 2012-10-06T06:50:21.970 に答える
0

私は最初のものを使い、魔法の方法を利用し__get()ます。

class Test {

    private $first = 'first';
    private $second = 'second';

    public function data($what){
        return $this->{strtolower($what)};
    }

    public function __get($what){
        // This method is called whenever you're trying to access an inaccessible property.
        return null;
    }
}

$Test = new Test();
var_dump($Test->data('first')); // string: 'first'
var_dump($Test->data('abcde')); // null

もちろん、関数から取得できるプロパティの配列を定義するなど、他の代替手段を使用することもできます。次に、data()関数内で、要求されたプロパティが取得可能かどうかを確認します。それ以外の場合は null を返します

class Test {
    private $first = 'first';
    private $second = 'second';
    private $retrievable = array('first', 'second');

    public function data($what)
    {
        if (in_array($what, $this->retrievable))
        {
            return $this->{strtolower($what)};
        }
        return null;
    }
}

この方法では、コードを変更する必要はなく、取得可能なアイテムの配列を編集するだけです。

于 2012-10-06T06:42:34.910 に答える