Warunek Boolean i string - php

Muszę zmienić swój status na słowa w metodzie, ale kiedy przekazuję argument jako ciąg do metody, otrzymuję wynik z obu warunków:

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";
}
}

Kiedy przekazuję wartość "False" jako ciąg do metody, którą otrzymuję truefalse wynik, ale nie mam żadnych problemów z wartościami ciągu.

Odpowiedzi:

5 dla odpowiedzi № 1

Powinieneś użyć === zamiast == aby sprawdzić, czy wartość jest identyczna. Ponieważ każdy ciąg będzie uważany za true jeśli porównane bez sprawdzania typu zmiennej. Zmień swój kod na

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 dla odpowiedzi nr 2

Prosta sztuczka, która może się przydać:

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

json_decode zamieni "False" lub "false" na boolean fałszywy, to samo z prawdą.

Innym sposobem na zrobienie tego byłoby pozostawienie samych łańcuchów, więc zamień booleany i liczby całkowite na ciąg "true" i "false".

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