Логическая ошибка в троичном операторе

#php #boolean #ternary-operator

#php #логическое значение #тернарный оператор

Вопрос:

Может кто-нибудь объяснить мне, почему этот троичный оператор возвращает второй вариант вместо первого?

Это код :

 $token_sid =
    ($user->data['user_id'] == ANONYMOUS amp;amp;
     !empty($config['form_token_sid_guests'])) ? $user->session_id : '';
  

И вот значения для моего фактического тестирования

 $user->data['user_id'] = 36412
ANONYMOUS = 1
$config['form_token_sid_guests'] = 0
$user->session_id = 4c148b664b7284ecb776c0a932ddf008

$token_sid = ''
  

Есть идеи, почему это возвращает пустое значение вместо идентификатора сеанса пользователя?

Комментарии:

1. Вам следует рассмотреть возможность использования if / else вместо троичного оператора, когда код даже немного сложный, чтобы сохранить его читабельным.

Ответ №1:

 $user->data['user_id'] = 36412
  

не равно

 ANONYMOUS = 1
  

(36412 != 1)
Таким образом, первое условие «И» не выполняется, и ваш else-«Блок» будет оценен.