Vous pouvez créer une classe de configuration avec des propriétés statiques.
class Config
{
static $dbHost = 'localhost';
static $dbUsername = 'user';
static $dbPassword = 'pass';
}
alors vous pouvez l'utiliser simplement :
Config::$dbHost
Dans mes projets, j'utilise parfois un modèle de conception SINGLETON pour accéder aux données de configuration. C'est très confortable à utiliser.
Pourquoi ?
Par exemple, vous avez 2 sources de données dans votre projet. Et vous pouvez choisir laquelle d'entre elles est activée.
Quelque part dans le fichier de configuration que vous choisissez :
$dataSource = 'mysql' // or 'json'
Lorsque vous changez de source, toute l'application doit passer à la nouvelle source de données, ce qui fonctionne bien et ne nécessite pas de modification du code.
Exemple :
Config :
class Config
{
// ....
static $dataSource = 'mysql';
/ .....
}
Classe singleton :
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;
}
}
... et quelque part dans votre code (par exemple, dans une classe de service) :
$container->getItemsLoader(AppConfig::getInstance()->getDataSource()) // getItemsLoader need Object of specific data source class by dependency injection
Nous pouvons obtenir un objet AppConfig de n'importe quel endroit du système et obtenir toujours la même copie (grâce à static). La méthode init () de la classe est appelée dans le constructeur, ce qui garantit une seule exécution. Vérifications du corps de la méthode init() La valeur de la config $dataSource, et crée un nouvel objet de la classe de source de données spécifique. Maintenant notre script peut obtenir l'objet et opérer sur lui, sans savoir même quelle implémentation spécifique existe réellement.