我什么时候应该使用什么?
我可以选择在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的支持。
答案 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');