2017-02-26 3 views
0

PHP静的クラス変数を動的に設定することは可能ですか?例では、私はその後、VARを設定する関数「databaseInit」に設定したい変数の文字列表現を渡したいの下に...PHP静的変数を文字列から設定する方法

class app { 
    static $database_smf; 
    static $database_phpbb; 

    /** 
    * Initialise the app 
    */ 
    static function init(){ 

     // No initialise the db connection 
     self::databaseInit('database_phpbb'); 
     self::databaseInit('database_smf'); 

    } 

    static function databaseInit($database){ 
     // is it possible to dynamically set the static var based on the param provided? eg: 
     self::[$database] = true; 
    } 
} 
+0

[PHPで動的クラス名を持つクラスから静的プロパティを取得する](http://stackoverflow.com/questions/1279081/getting-static-property-from-a-class-with-dynamic-class) -name-in-php) – MatsLindh

+0

あなたがリンクしている質問は簡単ではなく、答えもありません。だから、技術的にはい、しかし、私はこの質問は、他の人がより効率的に問題の一番下に達するのを助けるでしょう:D – John

答えて

0

用途:

self::$$database = true; 

の代わりに:

self::[$database] = true; 

class app { 
    static $database_smf; 
    static $database_phpbb; 

完全なコード、コード内でほんの少しの変化 :

static function databaseInit($database){ 
    self::$$database = true; 
} 

..しかし、実際には、配列を保持し、配列のキーを操作するだけで、他の静的変数で奇妙なことをするのではなく、単一の名前空間内にすべての設定を保持します。名前は

class app { 
    static $databases = []; 

    ... 

    static function databaseInit($database) { 
     self::$databases[$database] = true; 
    } 
} 

など、誤って入力され、次のステップは、それが簡単にテストすることができ、代わりにローカルにその状態を維持しますので、代わりにクラスは非staticにするだろう。

+0

ああもちろんもちろん!可変変数!完璧なおかげで! – John

1

はいそれが可能です。あなたはプレーンな変数の変数名を使用することができます

/** 
    * Initialise the app 
    */ 
    static function init(){ 

     // No initialise the db connection 
     self::databaseInit('database_phpbb'); 
     self::databaseInit('database_smf'); 

    } 

    static function databaseInit($database){ 
     // is it possible to dynamically set the static var based on the param provided? eg: 
     self::$$database = true; 
    } 
} 
関連する問題