我应该如何存储项目设置?
哪个更好 - 在我的所有设置中使用$settings
数组:
$settings['max_photos'] = 30;
//...
或创建一个单独的Config
类,其中包含所有设置?
Class Config {
private $max_photos = 30;
//...
}
有什么好的例子吗?
答案 0 :(得分:11)
我认为最好使用常量进行配置。例如,使用类常量:
class Config {
const
max_photos = 30,
something_else = 100,
// ...
;
}
echo Config::max_photos;
如果你有PHP 5.3,你也可以将它们定义为全局常量:
const MAX_PHOTOS = 30;
echo MAX_PHOTOS;
但我认为这远不那么干净和直截了当。
显然只要您只存储常量,即标量,非表达式值,这只会起作用。例如,如果您的配置包含数组,则此功能将不再起作用。在这种情况下,我将使用具有公共静态属性的Config类:
class Config {
public static $per_page = 30;
public static $array = array(...);
}
echo Config::$per_page;
后者与$config
数组方法非常相似,但是有哪些好处(或者这可能是一个缺点?)可以从包括函数和类在内的所有地方访问该类,而该数组只能在除非使用global $config;
将其导入函数/类中,否则为全局空间。
答案 1 :(得分:2)
要么你会感觉很舒服,要么做得最好。
答案 2 :(得分:1)
最好的方法是将您的设置存储在文件中。 并操纵此文件声明一个在文件上执行操作的类
答案 3 :(得分:1)
如果你采用数组方法,你可以使用数组文字来获得稍微更易读的代码:
$settings = array(
'max_photos' => 30,
'max_width' => 100
//...
)
答案 4 :(得分:1)
我的两分钱:同时使用两者。大多数应用程序配置设置属于全局数组变量。需要从不同的应用程序部分访问配置数据,这就是全局变量的用途。将所有内容保存在一个数组中是最明智的。阵列可以扩展,例如例如,在config.php中设置了一些选项,其余选项从config.ini中读取。
但是CONSTANTS也有一席之地。如果一个选项确实是应用程序运行时期间可能发生的变化,或者它更多是固定/魔术值,那么绘制的细线就是。如果设置一次,则不应更改应用程序设置(或渲染可能会失败),则此选项不应位于数组中,而应作为常量固定。 (这是一个解释性的经验法则,但很适合我。)
答案 5 :(得分:0)
如果项目设置太重,那么文件(xml更好)是好的,专用的设置类也很好。
如果项目设置很小,那么阵列最好,它非常快,不会出现与I / O相关的问题。
即使您可以使用数据库(较慢和身份验证问题)。
答案 6 :(得分:0)
我倾向于将配置值仅在配置数组中全局访问,并定义可在任何地方访问的值。例如:
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;
}
请记住,此示例已被删除,以展示一个想法。