Оператор if не работает для false в php
при попытке ознакомиться с if
оператор в PHP, это произошло.
Первый раз я попробовал этот код ниже.
if(true) {echo 'true';} else {echo 'false';}
и вывода true
когда условие true
. Опять же, когда условие false
(if(false)
) он выводит false
.
но я попробовал то же самое, используя переменную в качестве условия, изменяя значение переменной.
$con='false';
if($con){echo 'true';} else{echo 'false';}
в этой ситуации выход true
даже если значение переменной is false
или true
. В то же время if statement
работает нормально, когда 1
и 0
используется true
и false
. Почему это происходит?
10 ответов
PHP делает некоторые подлые вещи в выражении if. Следующие значения считаются ложными:
- само логическое значение FALSE
- целое число 0 (ноль)
- поплавок 0.0 (ноль)
- пустая строка и строка "0"
- массив с нулевыми элементами
- объект с нулевыми переменными-членами (только PHP 4)
- специальный тип NULL (включая unset переменные)
- созданы объекты SimpleXML из пустых тегов
каждое другое значение считается TRUE (включая любой ресурс).
вы фактически передаете строку, которая говорит слово false, а не само значение false. Поскольку этого нет в приведенном выше списке, это действительно считается правдой!
$con='false';
это 'false'
является допустимой строкой, которая не является логической FALSE
, как $con='hi';
нет.
$con=FALSE; //this is false now
цитата из руководство
чтобы указать логический литерал, используйте константы TRUE или FALSE. Оба не учитывают регистр.
также прочитайте эти другие параметры, которые у вас есть
при преобразовании в логический тип, следующие значения рассматриваются как false:
◦ само логическое значение FALSE
integer целое число 0 (ноль)
float поплавок 0.0 (ноль)
◦ пустая строка и строка "0"
array массив с нулевыми элементами
object объект с нулевыми переменными-членами (только PHP 4)
◦ специальный тип NULL (включая переменные unset)
Objects объекты SimpleXML, созданные из пустых тегов
тогда вы заметили это
в то же время, если заявление работает нормально, когда 1 и 0 вместо true и false. Почему это происходит?
это потому, что 0 в любой форме является ложным, либо строковым, либо числовым. Но текст false
поскольку строка не является ложной по причинам, упомянутым выше.
также читайте о PHP Строгого Сравнения так как вы учитесь, потому что
var_dump(0==FALSE); //bool(true)
var_dump(0===FALSE); //bool(false) :)
как описано в разделе про выражения, выражение вычисляется в булево значение его. Если выражение имеет значение TRUE, PHP выполнит оператор, а если значение FALSE - проигнорирует его. Более подробную информацию о том, какие значения оцениваются как FALSE, можно найти в 'преобразование в boolean'.
Так как в документах попробуйте использовать
$con = false;//boolean and not a string
if($con){echo 'true';} else{echo 'false';}
при преобразовании в boolean, следующие значения считаются FALSE:
◦ само логическое значение FALSE
integer целое число 0 (ноль)
float поплавок 0.0 (ноль)
◦ пустая строка и строка "0"
array массив с нулевыми элементами
object объект с нулевыми переменными-членами (только PHP 4)
◦ специальный тип NULL (включая переменные unset)
Objects объекты SimpleXML, созданные из пустых тегов
вы используете "false" как строка переменная, но это слово false, а не BOOLEAN константы. Просто используйте false
if(true) {echo 'true';} else {echo 'false';}
$con='false'; // Wrong
$con=false; // Right
if($con){echo 'true';} else{echo 'false';}
и когда вы делаете операторы if, это будет работать:
if ($con == false) { echo 'false'; }
или вы можете использовать A===, который сравнивает одно выражение с другим по значению и по типу.
if ($con === false) { echo 'false with type safe comparison!'; }
используйте bool вместо строки:
$con = false;
ваш оператор if просто проверит, что $con не пуст, поэтому в вашем примере он всегда будет истинным.
во втором примере,$con
не является логическим false
, это строковый литерал 'false'
(обратите внимание на кавычки), и любая непустая строка в PHP оценивается как true
.
чтобы исправить это, просто брось цитаты:
$con=false; // no quotes!
if($con){echo 'true';} else{echo 'false';}
ваше объявление $con является строкой, а не bool. Поэтому он всегда будет возвращать true. Чтобы объявить логическое значение, используйте:
$con=FALSE; //or TRUE
'false'
нет же false
.
if('true')
или if('false')
результате true
всегда, как они будут рассматриваться как string
s и будет преобразован для сравнения.
$con=false;
if($con){echo 'true';} else{echo 'false';}
печати false