Creating a config file in PHP

前端 未结 10 2119
难免孤独
难免孤独 2020-11-27 10:36

I want to create a config file for my PHP project, but I\'m not sure what the best way to do this is.

I have 3 ideas so far.

1-Use Variable<

10条回答
  •  無奈伤痛
    2020-11-27 11:02

    You can create a config class witch static properties

    class Config 
    {
        static $dbHost = 'localhost';
        static $dbUsername = 'user';
        static $dbPassword  = 'pass';
    }
    

    then you can simple use it:

    Config::$dbHost  
    

    Sometimes in my projects I use a design pattern SINGLETON to access configuration data. It's very comfortable in use.

    Why?

    For example you have 2 data source in your project. And you can choose witch of them is enabled.

    • mysql
    • json

    Somewhere in config file you choose:

    $dataSource = 'mysql' // or 'json'
    

    When you change source whole app shoud switch to new data source, work fine and dont need change in code.

    Example:

    Config:

    class Config 
    {
      // ....
      static $dataSource = 'mysql';
      / .....
    }
    

    Singleton class:

    class AppConfig
    {
        private static $instance;
        private $dataSource;
    
        private function __construct()
        {
            $this->init();
        }
    
        private function init()
        {
            switch (Config::$dataSource)
            {
                case 'mysql':
                    $this->dataSource = new StorageMysql();
                    break;
                case 'json':
                    $this->dataSource = new StorageJson();
                    break;
                default:
                    $this->dataSource = new StorageMysql();
            }
        }
    
        public static function getInstance()
        {
            if (empty(self::$instance)) {
                self::$instance = new self();
            }
            return self::$instance;
        }
    
        public function getDataSource()
        {
            return $this->dataSource;
        }
    }
    

    ... and somewhere in your code (eg. in some service class):

    $container->getItemsLoader(AppConfig::getInstance()->getDataSource()) // getItemsLoader need Object of specific data source class by dependency injection
    

    We can obtain an AppConfig object from any place in the system and always get the same copy (thanks to static). The init () method of the class is called In the constructor, which guarantees only one execution. Init() body checks The value of the config $dataSource, and create new object of specific data source class. Now our script can get object and operate on it, not knowing even which specific implementation actually exists.

提交回复
热议问题