"правда" или правда, которая более правильная - PullRequest
1 голос
/ 06 ноября 2011

У меня есть технический вопрос, который нужно проконсультировать эксперта. У меня есть данные в базе данных, которая представляет собой строку «истина». Но когда я получаю его для проверки условия, какое из них целесообразнее использовать, даже если они оба работают.

if ($data == true)

или

if ($data == "true")

По моему инстинктивному пониманию, используйте "true", чтобы проверить, является ли сохраненное значение строкой, и используйте true без кавычек, когда значение базы данных хранится как логическое значение. Но хочу подтвердить, ребята.

Спасибо ...

Ответы [ 5 ]

4 голосов
/ 06 ноября 2011

Подтверждено, по крайней мере, почти. Вы также можете проверить тип данных, однако в PHP для этого нужно использовать оператор ===:

if ($data === TRUE) # boolean
if ($data === "true") # string

Он называется идентичным оператором Документы и сравнивает значения и типа. Часто полезно.

1 голос
/ 06 ноября 2011

Если это строка, то $data == "true" - это то, что вам нужно.

Выражение ($data == true) эквивалентно ($data), поэтому оно будет оцениваться до true, даже если $data == "false"

0 голосов
/ 06 ноября 2011

Если значение хранится буквально как строка в БД, второе (if ($data = "true")) - это то, что вы хотите, хотя они оба будут работать.Я предлагаю второй для ясности.

Вы можете проверить это по команде с помощью интерактивной оболочки.

php -a
Interactive shell

php > $x = "true";
php > echo ($x == true) ? "True!" : "oops";
True!
php > echo ($x == "true") ? "True!" : "oops";
True!
php > echo ($x === "true") ? "True!" : "oops";
True!
php > echo ($x === true) ? "True!" : "oops";
oops

Обратите внимание на эффект, который имеет ===.Поскольку значение является строкой, они не равны при использовании ===.

0 голосов
/ 06 ноября 2011

"false"==true верно.

Если в вашей базе данных есть столбец, который имеет только значения «true» или «false», то это неэффективно. Преобразовать столбец в tinyint (или bool).

В противном случае вам следует рассмотреть возможность переключения строковых значений "true" и "false" на логические значения true и false при извлечении их из базы данных.

0 голосов
/ 06 ноября 2011

Важно понять, что значение будет из базы данных, если предполагается, что оно равно false.

Если база данных возвращает "false", и вы проверяете $val == true и $val == "true" только последние будут давать правильные результаты.

Возможно, вам придется обратиться к таблицам сравнения типов php , чтобы убедиться, что вы понимаете, с чем вы проверяете.

Кроме того, есть ли вероятность того, что база данных может вернуть одно из следующих значений?

"true"
"True"
"TRUE"
"TrUe"

Просто нормализуйте или санируйте значения базы данных (в идеале, храните двоичные значения в логическом поле, чтобынеобходимо.

...