Php “放置在何处”;“设置”;框架结构

Php “放置在何处”;“设置”;框架结构,php,frameworks,programming-languages,specifications,Php,Frameworks,Programming Languages,Specifications,这更像是一个概念性的问题。假设你有一个PHP框架来运行一个通用的网站。 当然,您可以通过设置来调整框架行为,问题是:在哪里放置这些设置更自然 我的框架由一些函数组成,这些函数可以帮助我完成一些任务(例如缓存管理) 在这个fw中,我使用了一个通用变量 $config = array( 'setting1'=>'value1' etc ); 如果函数需要,它会执行一个全局: function manageCache() { global $config; //> pe

这更像是一个概念性的问题。假设你有一个PHP框架来运行一个通用的网站。 当然,您可以通过设置来调整框架行为,问题是:在哪里放置这些设置更自然

我的框架由一些函数组成,这些函数可以帮助我完成一些任务(例如缓存管理)

在这个fw中,我使用了一个通用变量

$config = array( 'setting1'=>'value1' etc );
如果函数需要,它会执行一个
全局

function manageCache() {
    global $config;

    //> perform task with settings from $config
}
考虑到我的框架的过程性,以及有人说
global是邪恶的
,您将如何管理设置

谢谢


编辑1:请不要告诉我们使用CONSTATS,我有很多设置,我不想做大量的常数+它们必须是可编辑的

< P>如果你的设置是不变的并且不改变,那么考虑使用<代码>定义())< /> > -< 它们是否需要可编辑,然后您可以使用
globals
,但请确保
register\u globals
处于禁用状态

如果您使用的是PHP5,那么您可以实现来实现这一点。

我倾向于使用一个而不是一个变量,因为这至少可以消除对全局变量的需要


也就是说,您无法(轻松地)通过定义存储复杂的数据类型,例如数组,因此您需要将其考虑在内。

将全局值作为函数的参数传递

manageCache($config);

Globals真的很邪恶

通常情况下,框架中的某个地方会有一个配置文件夹,在启动时自动包含该文件夹

它可能看起来像这样:

ROOT/
  config/
    db.php
    cache.php
    constants.php
$config->get_config('settings_1');
然后,您将拥有类似于Config类的东西,该类负责导入此配置变量并将其转换为实例变量。通过这种方式,您可以访问以下配置变量:

ROOT/
  config/
    db.php
    cache.php
    constants.php
$config->get_config('settings_1');

您的配置阵列没有问题。这是一种很常见的方法。全球人都是邪恶的谬论是货运邪教。请忽略

现在,
$config
数组本身通常很容易使用。但你可以在这上面展开。例如,初始化后将其转换为ArrayObject非常简单:

$config = new ArrayObject($config, 2);
这将允许您以
$config[“setting”]
$config->setting
的方式访问设置。这对眼睛比较容易

如果您还希望避免到处导入数组,因为有时只需要一个值,那么为了方便起见,可以使用包装函数
config(“setting”)
展开


顺便说一句,我自己通常混合使用配置数组和常量。我还为插件制作了一个小管理工具,并在中央
config.php
中创建了一个设置数组

不,他们不是。但是模因是邪恶的。如果它是开源的,并且主要是程序框架,请将它添加到。@mario:我写的:(它没有任何文档,否则我会把它放在某个地方:)我会坚持使用全局$config;