Yii2:配置参数与const / define

时间:2015-02-04 08:57:25

标签: php configuration config yii2

我什么时候应该使用什么?

我可以选择在index.php条目文件中定义常量,就像Yii2 guide: constants中建议的那样。或者我可以在配置中使用参数 - 在YII2 guide: params中解释。两者都是按应用而非全球化。

目前,在我看来,如果我想组合这样的值,params就不那么舒服了:

define('SOME_URL',            'http://some.url');
define('SOME_SPECIALIZED_URL', SOME_URL . '/specialized');

此外,与常量相比,访问的代码更多(Yii::$app->params['something'])。

那么什么时候应该或者我可以使用什么?

小更新:在PHP 7 define()中也支持数组,因此整个params结构可以配置为常量。可能更好地得到IDE的支持。

1 个答案:

答案 0 :(得分:0)

常数的主要缺点(同时也是优势)是它们不变。设置后,您无法对其进行更改。这是唯一重要的事情。您应该将常量用于在执行期间永远不会更改的值,并将params用于其他所有值。

当您开始为应用程序编写测试时,常量可能是真正的PITA。它会告诉你许多你认为不变的东西并不是真的。此时参数更灵活 - 您可以使用合并配置数组轻松更改它们或在配置级别进行调整。使用常量可能会使您陷入无法配置的应用程序陷阱,无法修改硬编码常量,无法安装在不同的环境中。

  

此外,与常量相比,访问的代码更多(Yii::$app->params['something'])。

这完全无关紧要。作为程序员,您花在实际编写代码上的时间不到5%。额外的10次击键将没有任何区别。你应该总是在可读性方面考虑它。您只需编写一次代码并将其读取数百次,因此阅读和理解代码所需的时间比编写代码的时间要长得多。使用已知的约定(并且Yii::$app->params就是其中之一)使您的代码更容易理解,尤其是对于其他程序员。

但是如果你真的想写更少的代码,你总是可以创建一个包装函数来短暂访问params。

function p($name) {
    return Yii::$app->params[$name];
}

echo p('my-param');