Оператор 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;

во втором примере,$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 всегда, как они будут рассматриваться как strings и будет преобразован для сравнения.

$con=false;
if($con){echo 'true';} else{echo 'false';} 

печати false


измените значение переменной на это

   $con = false;