Config files.

dakata__92

Super Moderator
Създадох си един клас който да ми обработва дефаутовите настройки на работната рамка.
Класът:
PHP:
<?php

namespace system\core;

class MDC{

    private static $instance = null;
    private $configFolder = null;

    private function __construct() {
        
    }

    public function setConfigFolder($configFolder) {
        if(!$configFolder){
            throw new \Exception('Empty config folder path.',500);
        }
        $_configFolder = realpath($configFolder);
        if($_configFolder && is_dir($_configFolder) && is_readable($_configFolder)){
            $this->configFolder = $_configFolder . DIRECTORY_SEPARATOR;
			return $this;
        }else{
            throw new \Exception('Config directory read error:' . $configFolder);
        }
    }
	
	public function load($filePathName,$extension='.php'){
		$path = $this->configFolder.$filePathName.$extension;
		$_path = realpath($path);
		if(file_exists($_path) && is_readable($_path)){
			return include $_path;
		}else{
			throw new \Exception("No such file path: [".$path."] in this [".$this->configFolder.'] directory!', 500);
		}
	}
	
    public function getConfigFolder() {
        return $this->configFolder;
    }
	
    public static function getInstance(){
        if(self::$instance == null){
            self::$instance = new self();
        }
        return self::$instance;
    }

}

В главният апликейшън клас правя така в конструктора му и е сингълтон:
PHP:
private function __construct(){
		$this->MDC = \system\core\MDC::getInstance();
		if($this->MDC->getConfigFolder() == null){
			$this->MDC->setConfigFolder($this->configFolder);
		}
	}

public function MDC() {
        return $this->MDC;
    }

И разпространявам настройките из файловете където е нужно така:

PHP:
// $this->opt = $this->options('core/'.$this->className);
private function options($path){
		return \system\core\SAL::getInstance()->MDC()->load($path);
	}

Въпроса ми е това добре ли е ? Чедух се дали да не дефинирам като константа този тези масиви define() и да си ги викам като такива? Дайте идея да го подобря.
 
Само ще вмъкна, че за дефиниране на обекта винаги мога да го сериализирам
PHP:
define("MDC", serialize(\system\core\MDC::getInstance()));
и после да викам така :
PHP:
$t = unserialize(MDC)->getConfigFolder();
var_dump($t);

Въпроса ми е кое е по-добре?

Чудех се дали да не наследявам класът MDC - Manage Default Configurations в другите класове и просто да си викам parent::load(); ?
Дайте идеи кое е по-добре? Някак ми се струва че концепцията ми е постна. Много излишно писане имам. Мисля, че наследяването е добра идея. По-добра от дефиниране на константи и така нататък.
 
emagi каза:
dakata__92 каза:
дефаутовите настройки на работната рамка.
???
Какво е това?
По default фреймлорка (работната рамка) има собствени настройки. Тоест класове от системата имат настройки които внасям от конфигурационната папка където се намират. Например host,pass,user,name за конекция към базата или дали да се проверява за определени символи URL-то и така нататък. Въпроса ми е как когато заредя конфигурационната папка да лоадвам без да правя излишни инстанции към главният апликейшън или поне да сбия кода или да се наследява някакъв абстрактен метод и така нататък. Как да преправя тази системка да е по-ефективна.
 
Какво е "MDC"? Защо трябва да имаш цял клас, който обработва default стойности? Защо нямаш просто клас, който обработва конфигурационните файлове (например yml, или пък чист масив) - не мислиш ли, че ще е по-добре така (general case)?
 
djman каза:
Какво е "MDC"? Защо трябва да имаш цял клас, който обработва default стойности? Защо нямаш просто клас, който обработва конфигурационните файлове (например yml, или пък чист масив) - не мислиш ли, че ще е по-добре така (general case)?
В конфигурационната папка имам файлове които са за библиотеката. Тя не се инициализира освен ако потребител не я извика но класът си прави инстанция към главният клас където се вика конфигурацията и се взимат настроиките за било то библиотеката или каквото е там.

PHP:
// $this->opt = $this->options('core/'.$this->className);

private function options($path){

		return \system\core\SAL::getInstance()->MDC()->load($path);

	}

Това е по класовете и така взимам настройките. Правя инстанция и взимам
SAL:
PHP:
private function __construct(){

		$this->MDC = \system\core\MDC::getInstance();

		if($this->MDC->getConfigFolder() == null){

			$this->MDC->setConfigFolder($this->configFolder);

		}

	}



public function MDC() {

        return $this->MDC;

    }
и вече самият клас MDCnкойто съм дал отново в първият пост.
 

Back
Горе