Значення булевих і рядків - php

Мені потрібно змінити свій статус на слова методом, але коли я передаю аргумент як рядок до методу, я отримую результат за обома умовами:

public static function Status($status)
{
if ($status == true || $status == True  || $status == "true" || $status == "True" || $status == 1)
{
echo "true";
}
if ($status == false || $status == False || $status == "false" || $status == "False" || $status == 0)
{
echo "false";
}
}

Коли я передаю значення "False" як рядок методу, який я отримую truefalse Результат, але я не маю проблем з рядковими значеннями.

Відповіді:

5 за відповідь № 1

Ви повинні використовувати === замість == щоб перевірити, чи значення ідентичні. Тому що будь-який рядок буде розглядатися як true якщо порівнювати без перевірки змінної типу. Отже, змініть свій код на

function Status($status)
{
if ($status === true || $status === True  || $status === "true" || $status === "True" || $status === 1)
{
echo "true";
}
if ($status === false || $status === False || $status === "false" || $status === "False" || $status === 0)
{
echo "false";
}
}

http://php.net/manual/en/language.operators.comparison.php


1 для відповіді № 2

Простий трюк, який може стати в нагоді:

if (is_string($status)) $status = json_decode($status);
if ($status) {
echo "true";
}
else {
echo "false";
}

json_decode перетворить "False" або "false" в логічний помилковий, так само з істинним.

Інший спосіб це зробити - це залишити рядки самостійно, тому перетворити логіни та цілі числа до рядка "true" і "false".

if (!is_string($status)) $status = ($status) ? "true" : "false";
echo $status;