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 № 1Powinieneś 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;