<?php
abstract class Config {
static private $_extension = 'php';
static public function setExtension($ext) {
self::$_extension = $ext;
}
static public function getExtension($ext) {
return self::$_extension;
}
static public function get($name) {
$arr = explode('.', $name);
$lib = ucfirst(self::$_extension).'Config';
return $lib::get(array_shift($arr), $arr);
}
static public function load($name) {
$lib = ucfirst(self::$_extension).'Config';
return $lib::load($name);
}
}
?>
<?php
abstract class Config {
static protected $is_inited = false;
static private $_extension = 'php';
static provate $_obj;
static public function setExtension($ext) {
self::$_extension = $ext;
}
static public function getExtension($ext) {
return self::$_extension;
}
static public function init() {
if (self::$is_inited == true) return;
$lib = ucfirst(self::$_extension).'Config';
self::$_obj = new $lib;
}
static public function get($name) {
$arr = explode('.', $name);
$lib = self::$obj
return $lib->get(array_shift($arr), $arr);
}
static public function load($name) {
return self::$obj->load($name);
}
}
разница в том, что в первом варианте мы не храним экземпляр класса, читающего конфиг, использовать удобно, удобно даже обратиться к классам, читающим конфиги напрямую через стат. методы, напр. YamlConfig::load()
а во втором варианте храним экземпляр объекта, неудобство в том, что надо еще вызывать предварительно метод init(), либо делать ленивую инициализацию, запихав проверки в каждый из методов класса