我应该如何存储项目设置?
哪个更好 - 使用$settings
阵列用我所有的设置:
$settings['max_photos'] = 30;
//...
,或者创建一个单独Config
类中的所有设置?
Class Config {
private $max_photos = 30;
//...
}
任何很好的例子?
我应该如何存储项目设置?
哪个更好 - 使用$settings
阵列用我所有的设置:
$settings['max_photos'] = 30;
//...
,或者创建一个单独Config
类中的所有设置?
Class Config {
private $max_photos = 30;
//...
}
任何很好的例子?
最好的方法是将您的设置存储在文件中。 ,并操纵这个文件声明一个类操作文件
如果项目设置太重,那么文件(XML更好)是好的,一个专门的设置类也是好的。
如果项目设置很小,那么阵列是最好的,它的速度非常快,并且不会出现与I/O相关的问题。
即使您可以使用数据库(较慢和授权问题)。
两者都可以很好地工作,无论您感觉最舒服。
我认为最好使用常量进行配置。例如使用类常量:
class Config {
const
max_photos = 30,
something_else = 100,
// ...
;
}
echo Config::max_photos;
如果你有PHP 5.3,你也可以将它们定义为全局常量:
const MAX_PHOTOS = 30;
echo MAX_PHOTOS;
但我认为这是远不如简洁明了。
很明显,只要你只存储常量,即标量的非表达式值,它就会起作用。例如,如果你的配置包含数组,这将不再有效。在这种情况下,我会用一个配置类的公共静态属性:
class Config {
public static $per_page = 30;
public static $array = array(...);
}
echo Config::$per_page;
后者非常相似$config
阵列的方法,但有益处(或可这是一个缺点?)这个类是访问从包括函数和类在内的任何地方开始,而只有在全局空间中才能访问数组,除非使用global $config;
将它导入到函数/类中。
如果你去的阵列的方法,你可以使用数组文本略多可读的代码:
$settings = array(
'max_photos' => 30,
'max_width' => 100
//...
)
我的两分钱:同时使用。大多数应用程序配置设置属于全局数组变量。配置数据需要从不同的应用程序部分访问,这是全局变量的用途。把所有东西放在一起是最明智的。阵列可以扩展,例如,一些选项在config.php中设置,其余选项例如从config.ini中读取。
但也有一个CONSTANTS的地方。要画出的细节是,如果某个选项在应用程序运行时期间真的可能会发生变化,或者它是更多的固定/魔术值。如果一旦设置完成,您不应该更改应用程序设置(或渲染可能会失败),那么此选项不应该在数组中,而是按照常量固定地修复。 (这是一个解释性的经验法则,但对我很有帮助。)
我倾向于将配置值全局访问到配置数组中,并定义可在任何地方访问的值。例如:
INC/config.php文件
// only accessed in global scope (see init.php)
$config['error_reporting'] = E_ALL & ~E_NOTICE;
$config['memory_limit'] = '16M';
$config['time_zone'] = 'America/Los_Angeles';
// accessed within functions or class methods (see somefile.php)
define('HTTP', 'http://imac.local/my_site/');
define('HTTPS', 'http://imac.local/my_site/');
define('FILE_ROOT', '/Library/WebServer/Documents/my_site/');
INC /的init.php
require 'inc/config.php';
/* Set some php configurations */
isset($config['error_reporting']) ? error_reporting($config['error_reporting']) : '';
isset($config['time_limit']) ? set_time_limit($config['time_limit']) : '';
isset($config['memory_limit']) ? ini_set('memory_limit', $config['memory_limit']) : '';
isset($config['timezone']) ? date_default_timezone_set($config['timezone']) : date_default_timezone_set('America/Los_Angeles');
somefile.php
require 'inc/init.php';
function site_url($uri, $secure = FALSE)
{
return $secure ? HTTPS . $uri : HTTP . $uri;
}
请记住这个例子剥离下来展示一个想法。
+1常量为常数值,那么你可以放心,他们总是设置,不变和持久; fwiw静态类变量带有性能优势,可以在运行时更改。最后,有人建议配置ini或xml文件 - 简单的回答是,为什么浪费时间并添加不需要的额外负载(解析读取等)。 – nathan 2010-07-17 09:44:28
感谢,是的,我有数组太: $设置[ '语言'] =阵列( '工程'=> '英语', 'RUS'=> 'по-русски', '纬度'= >'Latviski' ); $ settings ['site_title'] = _(“网站标题”); $ settings ['default_lng'] ='eng'; /** *Мин。 количествогололов */ $ settings ['min_votes'] = 3; /** *Кол-воппльзователей,послекоторогорегистрациятолькопоприглашениям。 */ $ settings ['invites'] = 100000; // 25000; /** *请参考我们的隐私政策 */ $ settings ['invite_timeout'] = 86400 * 3; 我想,这个变种更好,谢谢大家的帮助! – ideea 2010-07-17 13:27:09