2015-06-04 4 views
1

я делаю это, чтобы проверить и получить атрибут сеанса в моем коде:Symfony2 лучший способ проверить/получить атрибут сеанса

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 */  
} 

Или лучше с ложным, если у вас есть "MYVAR", но пустой, вы не можете полагаться на "нулевой":

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

в соответствии с: Null vs. False vs. 0 in PHP

Я думаю, что третья является лучшим, один вызов $ session-> get, а не имеет и попадает в мой фактический код.

Я читал об альтернативном компарадионе с тройным оператором, http://fabien.potencier.org/article/48/the-php-ternary-operator-fast-or-not, я не использую его, главным образом потому, что я не знаком с ним, но если он не быстрее, мне это не нужно.

Можете ли вы подтвердить, что третий является лучшим, а если нет, то почему и как делать лучше?

+1

Что именно вы хотите проверить? Это существует? Это существует, но не имеет значения? Что он существует, но ценность не та, которую вы хотите? – Andrew

+0

Я должен быть уверен, что атрибут сеанса установлен, а get - значение – Nicolas

ответ

1

Это зависит от того, чего вы хотите достичь.

Первый вариант

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

имеет смысл, если вы хотите, чтобы убедиться, что эта переменная установлена, и если не вы на самом деле хотите, чтобы установить его или сделать что-нибудь еще. Это предполагает, что наличие этой сессии переменная настоящее время является необходимость

Второй вариант

$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 */  
} 

Итак, по-моему, это зависит от того, что вы хотите делать. Но нет лучшего или худшего пути, как вы просили, поскольку все они отличаются друг от друга.

+0

. Мой основной опрос: если я делаю первый, я использую два вызова (тогда получается). Если я использую третий, у меня тот же результат, но один звонок (просто получить). Оба правильные, и помимо стиля кодирования я не знаю, является ли кто-то лучшим, что бы ни было. – Nicolas

+0

все в порядке. Они просто зависят от того, что вы хотите. Но об этом говорится в моем последнем абзаце :) – DerStoffel