Php 为什么要传递配置对象?设置不能是常量吗?

Php 为什么要传递配置对象?设置不能是常量吗?,php,instantiation,Php,Instantiation,在我的应用程序中,我有我的常数: define('APP_PATH', WEB_ROOT . APP_DIR); define('LIBS_PATH', APP_PATH . LIBS_DIR); define('MODELS_PATH', APP_PATH . MODELS_DIR); define('VIEWS_PATH', APP_PATH . VIEWS_DIR); define('CONTROLLERS_PATH', APP_PATH . CONTROLLERS_DIR); etc..

在我的应用程序中,我有我的常数:

define('APP_PATH', WEB_ROOT . APP_DIR);
define('LIBS_PATH', APP_PATH . LIBS_DIR);
define('MODELS_PATH', APP_PATH . MODELS_DIR);
define('VIEWS_PATH', APP_PATH . VIEWS_DIR);
define('CONTROLLERS_PATH', APP_PATH . CONTROLLERS_DIR);
etc...
因为一旦我的应用程序启动,它们就永远不会改变,而且它们很容易从任何类/方法中访问

我还有一个带有其他设置的配置文件,它被导入到$config对象中,我在应用程序中传递并检索它们,如下所示:

$this->config->setting('some.setting');
<>我从来没有在我的应用程序的最后或中间更改配置值,所以把它们定义为常量不是很容易,所以我可以很容易地在代码中访问它们吗? 我也不想静态地检索设置,即

Config::setting('some.setting');
我看过一些PHP框架的代码,它们都将路径定义为常量,但在某种配置类中有其他配置设置,尽管据我所知,它们在整个代码中都不会更改这些配置设置,因为我没有阅读数万行中的每一行以及很多行框架似乎喜欢从不同类中的方法内部对各种方法进行静态调用,人们说它们是好的框架,但我读过并体验到,在类/方法内部进行静态调用时,弊大于利


您认为配置设置的最佳做法是什么?你是做什么的

在对象中包装常量可以使代码更易于移植

例如,通过这种方式,您可以在应用程序引导时从文件中加载常量,这样您就可以在任意数量的应用程序中重用代码,每个应用程序都有不同的配置文件

从另一个角度看,从类加载内容就像是一个幌子:你可以将设置从文件移动到数据库,甚至硬编码,整个应用程序都不会注意到


当然,您可以使用define来定义非常小的项目。

在配置对象中包装设置提供了封装,从而允许更好的共存


例如,假设您有一个数据库访问框架。如果使用全局设置,则无法在一个程序中轻松访问多个数据库。将设置放入一个对象中,您可以为相应的数据库使用特定的配置对象。

这些框架的其他功能包括能够为不同的环境进行不同的配置,例如,您的配置文件可以定义,除非定义了特定的测试设置,否则测试环境将从开发环境中继承设置。这是有意义的,但要访问配置设置,您不需要将$config对象的实例插入到所有需要某些设置的对象中吗?或者执行像Config::setting'some.setting'这样的静态调用;要获取您的设置或是否有其他方法?您确实需要静态注入或访问;这正是大多数框架访问配置的方式。使用依赖项注入容器DIC可以简化您注入到每个classIt的cleaner中的内容,从而只将所需的值注入到对象中,而不是传递配置。只有在初始化时才需要配置。我想我会保留我的配置类,以备将来扩展。我有一个依赖注入容器,它自动检索$config对象的实例,并通过我的对象的构造函数注入它,以便它们可以使用它。这不是很麻烦,但是有更好的方法吗?还是这是最好的方式?谢谢