【问题标题】:symfony2 best way to test/get a session attributesymfony2 测试/获取会话属性的最佳方法
【发布时间】:2015-06-04 10:18:12
【问题描述】:

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

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);

所以,如果没有找到会话属性,则返回“null”。

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

或者最好用false,如果你有“myVar”但为空,你不能依赖“null”:

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

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

我认为第三个是最好的,在我的实际代码中调用 $session->get,而不是 has 和 get。

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

您能否确认,第三是最好的,如果不是,为什么以及如何做到最好?

【问题讨论】:

  • 你到底想测试什么?那是存在的吗?那是存在的,但没有价值?它存在但价值不是你想要的?
  • 我必须确保设置了会话属性,并且获取的是值

标签: php symfony session


【解决方案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 */    
}

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

【讨论】:

  • 我的主要询问是:如果我做第一个,我使用两个调用(然后得到)如果我使用第三个,我有相同的结果,但是一个调用(只是得到)。两者都是正确的,除了编码风格,我不知道一个是不是最好的。
  • 一切都很好。他们只是取决于你想要什么。但这在我的最后一段中得到了回答:)
  • 虽然这是一个老话题,但是怎么样: if ($session->has('parameter') && $session->get('parameter') !== null) { do something ; }
  • 当然,为什么不呢。始终取决于您想要获得多少会话点击。 ? 你有介绍过吗?
猜你喜欢
  • 2014-10-31
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多