Склонен съм да използвам статичен клас Settings в PHP, това е така, защото
- Има глобален обхват.
- Можете да активирате/деактивирате промени в защитени конфигурации.
- Можете да добавите всякакви настройки по време на всяко място в рамките на времето за изпълнение.
- Можете да направите класа автоматизиран, за да извлича публични конфигурации от файл/база данни.
Пример:
abstract class Settings
{
static private $protected = array(); // For DB / passwords etc
static private $public = array(); // For all public strings such as meta stuff for site
public static function getProtected($key)
{
return isset(self::$protected[$key]) ? self::$protected[$key] : false;
}
public static function getPublic($key)
{
return isset(self::$public[$key]) ? self::$public[$key] : false;
}
public static function setProtected($key,$value)
{
self::$protected[$key] = $value;
}
public static function setPublic($key,$value)
{
self::$public[$key] = $value;
}
public function __get($key)
{//$this->key // returns public->key
return isset(self::$public[$key]) ? self::$public[$key] : false;
}
public function __isset($key)
{
return isset(self::$public[$key]);
}
}
След това във вашето време за изпълнение, ако сте заредили първо този файл, последван от конфигурационния файл на вашата база данни, конфигурационният файл на вашата база данни ще изглежда така:
<?php
Settings::setProtected('db_hostname', 'localhost');
Settings::setProtected('db_username', 'root');
Settings::setProtected('db_password', '');
Settings::setProtected('db_database', 'root');
Settings::setProtected('db_charset', 'UTF-8');
//...
echo Settings::getProtected('db_hostname'); // localhost
//...
Settings::setPublic('config_site_title', 'MySiteTitle');
Settings::setPublic('config_site_charset', 'UTF-8');
Settings::setPublic('config_site_root', 'http://localhost/dev/');
Както можете да видите, имаме метод __get
, на който трябва да бъде разрешено само да хваща публични променливи. Пример защо имаме това е следният:
$template = new Template();
$template->assign('settings', new Settings());
Независимо от факта, че сме използвали този обект като статичен обект, стойностите все още трябва да стоят така в шаблона, който сега можете да направите, да речем.
<html>
<head>
<?php echo isset($settings->config_site_title) ? $settings->config_site_title : 'Fallback Title'; ?>
</head>
</html>
И това ще ви позволи само да имате достъп до публичните данни през инициализирания период.
Това може да стане много по-сложно, но по-удобно за системата, някои примери:
- Метод
loadConfig
за автоматично анализиране на конфигурационен файл, xml, php, yaml.
- Ако регистрирате
shutdown_function
, можете автоматично да актуализирате базата данни с нови настройки.
- Можете автоматично да попълвате класа с конфигурация от тази база данни.
- Можете да внедрите итератори, за да го направите съвместим с цикъла.
- Много повече.
Това също е най-добрият метод за завършване на тази работа.
person
RobertPitt
schedule
16.09.2010