symfony2测试/获取会话属性的最佳方法

时间:2015-06-04 10:18:12

标签: php symfony session

我这样做是为了在我的代码中测试并获取会话属性:

if ($session->has("myVar")) {
    $myVar = session->get("myVar");
    /* do something */ 
}

但是,我读了会话代码并且:

 /**
 * Returns an attribute.
 *
 * @param string $name    The attribute name
 * @param mixed  $default The default value if not found.
 *
 * @return mixed
 *
 * @api
 */
public function get($name, $default = null);

因此,如果找不到session属性,则返回“null”。

if ($myVar = $session->get("myVar")) {
    /* do something */    
}

或者更好的假,如果你有“myVar”但是空的,你不能依赖“null”:

if ($myVar = $session->get("myVar", false)) {
    /* do something */    
}

根据:Null vs. False vs. 0 in PHP

我认为第三个是最好的,一个调用$ session-> get,而不是has和get in my actual。

我读到了与三元运算符http://fabien.potencier.org/article/48/the-php-ternary-operator-fast-or-not的替代比较,我不使用它,主要是因为我不熟悉,但是,如果它不快,我不需要它。

你能证实,第三是最好的,如果不是,为什么,以及如何做到最好?

1 个答案:

答案 0 :(得分:1)

这取决于你想要达到的目标。

第一个选项

if ($session->has("myVar")) {
    $myVar = session->get("myVar");
    /* do something */ 
}

如果你想确定,设置了这个var,如果没有,你真的想要设置它或做其他任何事情,这是有道理的。它假设存在此会话变量是必要的

第二个选项

$myVar = $session->get("myVar");

这个是有意义的,如果您愿意接收预期结果,或者如果没有设置则默认为空值。

建议:

$myVar = $session->get("myVar");
if (null === $myVar) {
    /* do something */    
}

第三个选项

$myVar = $session->get("myVar", false);

如果未设置此会话变量

,则只允许您覆盖默认值

建议:

$myVar = $session->get("myVar", false);
if (!$myVar) {
    /* do something */    
}

所以,在我看来,这取决于你想做什么。但是你所要求的并没有最佳或最差的方式,因为它们彼此不同。