Каков наилучший способ превратить переменную в boolean в php?
Я читал этот вопрос и увидел эту строку:
if ($a == $b) { return true } else { return false }
И это заставило меня задаться вопросом, как лучше всего использовать переменную неизвестного типа (может быть строка, может быть int, кто знает? кто заботится?) до логического?
Конечно, if ($var) { return true; } else { return false; }
сделал бы трюк, но я думаю, что return $var ? true : false;
, вероятно, лучше.
В этом отношении:
-
return $var && true
-
return $var || false
-
return !empty($var)
все, наверное, лучше, но есть ли лучший способ бросить на bool? Что еще более важно, что делает его лучше?
Изменить, чтобы уточнить:
Это не было написано с целью быть исчерпывающим списком способов перевода в логическое. Мой вопрос специально для явного литья. Прежде чем я узнал о empty
, я использовал isset($var) && $var
, так как это предотвратило бы распространение ошибок на необъявленные переменные. Теперь я использую !empty($var)
, поскольку он быстрее набирает.
!empty
имеет преимущество (dis) не бросать любые ошибки E_NOTICE
, когда переменная не определена. Это можно считать хорошим, если вы проверяете переменные $_GET
или $_SESSION
, для большинства других переменных, я полагаю, это можно считать плохим, поскольку это скроет проблемы, когда переменная не инициализируется там, где она должна была быть инициализирована.
Мне было любопытно, есть ли у других разработчиков другой способ делать то, что у меня не было
известно о.
Ответы
Ответ 1
Два способа:
-
Явный листинг:
Это когда вы явно передаете переменную, используя литеральный оператор-литье (bool)
.
return (bool) $expression;
-
Неявный листинг (с использованием операторов):
Здесь тип выводится из выражения. В PHP это включает логические операторы и операторы сравнения, и любой конструктор функции/языка, который ожидает логическое значение, например if
и while
:
return !!$expression;
или
return $expression == true;
или
return $a == $b;
или
return $a > 1;
или
if ($a)
Все методы попадут в одну из этих двух категорий.
Мое предложение состоит в том, что если вы используете какие-либо операторы (==
, !=
, >
и т.д.), не беспокойтесь о литье. Но если вы просто возвращаете переменную, то явно выполняете...
Ответ 2
Я лично всегда использую
(bool)$var;
Я думаю, что это самый ясный способ бросить его в логическое. Большинство людей, пришедших с другого языка, это понимают. Еще один, который вы забыли у вас, - это
!!$var;
Я считаю, что немного читать трудно.
Ответ 3
То, что я видел чаще всего в JavaScript: Двойное отрицание
return !!$var;
Объяснение:
!$var
оценивает $var
на противоположное логическое значение (если $var
не является логическим значением, это преобразован в boolean first (преобразование типа)), а второй !
снова инвертирует это значение, что приводит к логическому значению, $var
тоже будет оцениваться.
Это лучшее? Это зависит от ваших критериев. Как уже упоминалось, это может быть труднее понять (хотя это ничего особенного), но это, безусловно, самая короткая версия;)
Может также зависеть, какие значения вы считаете true
и false
. Эти значения по умолчанию оцениваются до false
:
- сама логическая ЛОЖЬ
- целое число 0 (ноль)
- поплавок 0.0 (ноль)
- пустая строка и строка "0"
- массив с нулевыми элементами
- объект с нулевыми переменными-членами (только для PHP 4)
- специальный тип NULL (включая неустановленные переменные)
- Объекты SimpleXML, созданные из пустых тегов
Update:
Я думаю, что в целом можно сказать, что каждый код, который позволяет явно возвращать true
или false
, лучше. Будь то через явное преобразование или неявное преобразование типа. Конечно, ясное (по определению) должно быть легче понять.
Наличие кода, такого как return $a ? true : false
, является избыточным. Особенно
if ($a == $b) { return true } else { return false }
который можно просто записать как return ($a == $b)
.
Должна быть причина, по которой это было недооценено в моих подчиненных;).
Update2:
Я бы избегал выражения типа return $var && true
. В PHP он возвращает логическое значение, но, например, в JavaScript или Python, оно вернет значение $var
, если оно будет равно true. И на этих языках этот "трюк" используется специально для достижения определенных эффектов. Поэтому для людей (более), знакомых с этими языками, может быть не очевидно (без документации или контекста), что нужно возвращать только логическое значение.
Ответ 4
Каков наилучший способ применить переменную неизвестного типа (может быть строка, может быть int, кто знает? кто заботится?) до логического?
return (bool)$var;
Ответ 5
Вы можете использовать:
if ((bool)$string)
http://php.net/manual/en/language.types.type-juggling.php
Обратите внимание, что в PHP с 0 == false вам нужно использовать === компаратор для получения сравнения типов и сравнения значений.
http://php.net/manual/en/language.operators.comparison.php