0

どこから探しればいいのか、どのように始めればいいのかわからないという状況で、助けが必要です。

大きな*.iniファイル(言語用)があり、phpドキュメントの先頭で1回だけ解析して、ドキュメント内の任意の場所で結果を使用したいと思います。

私は、次のようなクラスが必要だと思います。

class Language{
    private language = array();

    function get( $string ){
        return $this->language[ $string ];
    }

    function getLanguage(){
        /* get and parse *.ini file once */
        $result = array;

        /* set language */
        $this->language = $result;
    }
}

したがって、理論的には、phpドキュメントの冒頭で、クラスはどういうわけかgetLanguage()を呼び出し、言語配列を設定します。

Language::getLanguage();

次に、phpドキュメントの残りの部分、特に他のクラス内(関数paramとして送信せずに)で、*。iniファイルを再度解析せずに特定の言語配列要素を取得します。

class AClass{
    function __construct(){
        echo Language::get( $certain_string );
    }
}
new AClass;

どんなアドバイスも大歓迎です。

ありがとう。

4

2 に答える 2

1

::でメソッドを呼び出せるようにするには、静的に宣言する必要があります。

class Language {
    private static $lang = null; // you won't be able to get this directly
    public static function getLanguage(){
        if (self::$lang) { // you can check with is_null() or !is_array()
            return self::$lang; 
        }
        else { /* parse ini file here and set it in self::$lang */ }
    }
}
Language::getLanguage();

これがあなたに必要なものだと思います。さらに調整が必要な場合は、お知らせください。

PS:宣言するprivate function __construct(){}private function __clone(){}、クラシックなシングルトンデザインパターンになります。

于 2013-01-17T07:29:29.020 に答える
1

Language :: getLanguage();を使用する必要がある場合 この関数を静的として定義する必要があります。

public static function getLanguage(){
        /* get and parse *.ini file once */
        $result = array;

        /* set language */
        $this->language = $result;
    }

ただし、「シングルトン」パターンを使用することをお勧めします。

class Language{

    static private $_instance = null;

    private language = array();

    private function __construct(){}
    private function __clone(){}

    public static function getInstance(){
        if (self::$_instance === null){
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function get( $string ){
        return $this->language[ $string ];
    }

    public function getLanguage(){
        /* get and parse *.ini file once */
        $result = array;

        /* set language */
        $this->language = $result;
    }
}

したがって、これを使用すると、次のようにこのクラスのメソッドを呼び出すことができます。

Language::getInstance()->get('str');
Language::getInstance()->getLanguage();
于 2013-01-17T07:39:14.010 に答える