2017-11-06 7 views
0

私は全体のコードを間違って設計していると強く思っていますが、静的な値を継承することは可能ですか?静的な値を継承する

私はコールを持っているBaseModelの基本クラスを持っています。 BaseModelはさまざまなモデルタイプに拡張されており、それぞれにはタイプに注目した文字列値を持つpublic static $type;があります。私がcallStaticのコールでself::$typeと呼ぶとき、私は事実の後に意味をなさないヌルを返します。しかし、どのようにしてクラスの型を得ることができないのですか?callStaticコードを各クラスにコピーすることなく、どのように呼び出すことができるのでしょうか(私は特性に魔法のメソッドを入れることはできませんか? BaseClass

public static function __callStatic($method, $params) { 
    var_dump(self::$type); 
} 

は今のところ、私は空想何もしていませんよ。しかし、私はこの問題に近づく方法を決めることはできません。

答えて

1

staticキーワードで使用できるLate Static Bindingsを探しています。

self(また、)は、常にコンパイル時に評価されるため、継承と呼び出しコンテキストの知識がなくても常に実行されます。

staticしかし、実行時に呼び出しコンテキストを評価することでこの制限を解決しようとします。

class a { 

    public static $foo = "A"; 

    public static function __callStatic($method, $params) { 
     echo static::$foo . "\n"; 
    } 
} 

class b extends a { 
    public static $foo = "B"; 
} 

a::test(); 
b::test(); 
+0

これは最新の静的バインディングです。私は偶然、この質問を作成した直後にそのページを見つけました。質問を投稿した直後に「正しい」Google検索を考えたときには驚いた。 – RhoVisions

関連する問題