在整个控制器中使用相同的变量时,最好设置会话变量或重复调用相同的帮助函数吗?例如,假设我有一个具有hexColor属性的Ball对象:
$ball->hexColor;
数据库中的Ball表具有以下结构:
id | name | hexColor
现在,假设此十六进制颜色有较浅的版本和较暗的版本,并且我不想将其存储在表中,以节省内存并避免冗余数据:
不此:
id | name | hexColor | lightHexColor | darkHexColor
我的模型中有一个使颜色变暗或变暗的功能:
//second parameter: 1 = darken, 2 = lighten
public static function changeColorBrightness(String $hexColor, int $darkenOrLighten)
{
/* Some code */
return $alteredColor;
}
在我的控制器中,我只调用一次此辅助函数,一次变暗,一次变亮,并将它们存储在会话中:
public function someFunction($ballId)
{
$ball = Ball::find($ballId);
$darkColor = Ball::changeColorBrightness($ball->hexColor, 1);
$lightColor = Ball::changeColorBrightness($ball->hexColor, 2);
session()->set('darkColor', $darkColor);
session()->set('lightColor', $lightColor);
}
还是我在需要更改颜色的每种方法中都走了调用助手函数的效率较低的路线:
public function methodCalledFromRoute_1($ballId)
{
$ball = Ball::get($ballId);
$darkColor = Ball::changeColorBrightness($ball->hexColor, 1);
$lightColor = Ball::changeColorBrightness($ball->hexColor, 2);
/* More code */
}
public function methodCalledFromRoute_2($ballId)
{
$ball = Ball::get($ballId);
$darkColor = Ball::changeColorBrightness($ball->hexColor, 1);
$lightColor = Ball::changeColorBrightness($ball->hexColor, 2);
/* More code */
}
etc.
我觉得第一种方法(一次设置会话vars)不被认为是最佳编码实践,但是我不确定为什么不这样做。你们如何看待?什么是更好的方法?为什么?
答案 0 :(得分:0)
这取决于会话数据的存储位置。通常,它位于文件或数据库中,使得值的检索相对较慢。
因为执行changeColorBrightness()
函数最有可能比从会话中检索值快得多。