[英]PHP - create a class set an array var and use it global
在这种情况下,我需要一些帮助,即我不知道如何开始,甚至不知道在哪里寻找。
我有一个大的* .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;
任何建议都受到好评。
谢谢。
为了能够使用::调用方法,您需要将其声明为静态。
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(){}
-这将是经典的Singleton设计模式 。
如果您需要使用Language :: getLanguage(); 您应该将此函数定义为静态。
public static function getLanguage(){
/* get and parse *.ini file once */
$result = array;
/* set language */
$this->language = $result;
}
但是我建议使用“ Singleton”模式:
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.