0

次のような Abstract クラス内に setProperties() メソッドを作成したいと思います。

public function setProperties($array = null) {

        if (!empty($array)) {
            foreach($array as $key => $value) {
                if (property_exists($this, $key)) {
                    $this->{$key} = $value;
                }
            }
        }

    }

私がよくわからないのは、この抽象クラスから継承するクラスでそれを使用して、継承されたプロパティと子クラス固有を設定できるかどうかです。

property_exists() 関数で $this 以外のキーワードを使用する必要があるかどうかはわかりません。おそらく、遅延静的バインディング (static::) キーワードを使用する方法がありますか?

4

2 に答える 2

1

$thisはインスタンス固有であり、その結果、property_exists子クラスで正しく機能します。

于 2013-02-01T21:36:38.920 に答える
1

あなたのコードは基本的に動作するはずです。2 回出力する次の簡単な例を想像してくださいtrue

abstract class A {

    protected $var1;

    public function exists1() {
        var_dump(property_exists($this, 'var2'));
    }

}

class B extends A {

    protected $var2;

    public function exists2() {
        var_dump(property_exists($this, 'var1'));
    }
}


$o = new B();

$o->exists1();
$o->exists2();

ご覧のとおりproperty_exists()、子クラスが親クラスのメンバーにアクセスしているときに機能し、親クラスが子のメンバーにアクセスしようとしているときに機能します。

これは、抽象化の基本概念の 1 つです。あなたがやろうとしていることは絶対に大丈夫です。とにかくエラーが発生した場合、それは少し見落とされた詳細に違いありません

于 2013-02-01T21:43:08.383 に答える