0

我需要一些帮助来解决我不知道如何开始的情况,甚至不知道在哪里寻找。

我有一个大的 *.ini 文件(用于语言),我只想在 php 文档的开头解析一次,然后在文档中的任何地方使用结果。

我想,我需要一门课,比如:

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 文档的其余部分中的任何位置,尤其是在其他类中(不作为函数参数发送),无需再次解析 *.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(){}and private function __clone(){}- 这将是一个经典的Singleton 设计模式

于 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 回答