После игры с PHP я обнаружил, что true возвращается как 1, а false как ноль.
Это не правда (не каламбур).PHP, как и многие другие языки, имеет «истинные» и «ложные» значения, которые могут вести себя как TRUE
или FALSE
по сравнению с другими значениями.
Это так, потому что PHP использует слабую типизацию (против строгая типизация ).Он автоматически преобразует различные типы значений при сравнении, поэтому в конечном итоге может сравнивать два значения одного типа.Когда вы echo TRUE;
в PHP, echo
всегда будет выводить строку.Но вы передали ему логическое значение, которое должно быть преобразовано в строку, прежде чем echo
сможет выполнить свою работу.Таким образом, TRUE
автоматически преобразуется в строку "1"
, а FALSE
преобразуется в ""
.
Когда вы используете оператор ===?
Эта слабая или слабая типизация является причиной того, что PHP использует два оператора равенства, ==
и ===
.Вы используете ===
, когда хотите убедиться, что оба сравниваемых значения не просто «равны» (или эквивалентны), но также имеют одинаковый тип.На практике:
echo 1 == TRUE; // echoes "1", because the number 1 is a truthy value
echo 1 === TRUE; // echoes "", because 1 and TRUE are not the same type (integer and boolean)
При написании функций, которые возвращают true или false, каковы наилучшие практики для их использования?
Будьте точны, когда можете возвращатьфактический логический TRUE
или FALSE
.Типичные случаи - это функции с префиксом is
, например isValidInput
.Обычно ожидается, что такие функции будут возвращать либо TRUE
, либо FALSE
.
С другой стороны, полезно, чтобы ваша функция в некоторых случаях возвращала «ложные» или «правдивые» значения.Возьмите, например, strpos
.Если он находит подстроку в нулевой позиции, он возвращает 0
(int), но если строка не найдена, он возвращает FALSE
(bool).Итак:
$text = "The book is on the table";
echo (strpos($text, "The") == FALSE) ? "Not found" : "Found"; // echoes "Not found"
echo (strpos($text, "The") === FALSE) ? "Not found" : "Found"; // echoes "Found"