PHP if(变量)

Joe*_*lum 5 php

在各种PHP教程中,我看到了这种语法 -

if ($_POST) {
  do something
}
Run Code Online (Sandbox Code Playgroud)

我想知道这是否等同于isset或!(空)(任一个)或具有不同的属性.

mki*_*nas 5

它试图评估表达式并将其转换为布尔值.

参见"转换为布尔值"在http://php.net/manual/en/language.types.boolean.php,看看哪个值将等同于true,哪些false.

但它不检查数组键是否存在(即isset),因此如果您尝试if ($_GET['somekey'])somekey不存在,您将看到PHP Notice: Undefined index: somekey然后false将被假设.

最佳做法是首先手动执行empty()isset()检查.


Mic*_*eim 2

好问题。如果您问我,您正在解决 PHP 的阴暗面之一。

if 语句 就像在任何其他语言中一样,我可以想象 if 将参数评估为 true 或 false。

由于 PHP 并不真正了解类型,因此您可以将任何表达式作为参数,然后将其整体转换为 bool

以下值被视为“FALSE”

  • 布尔值 FALSE
  • 整数 0
  • 浮动 0.0
  • 空字符串
  • 字符串“0”
  • 任何具有零个元素的数组
  • NULL 例如未设置的变量或 $var = null
  • 从空标签创建时的 SimpleXML 对象

所有其他值或表达式结果都将转换为 bool TRUE

现在,知道了这一点,我们需要找出的是,表达式或函数执行时返回什么

如果未设置 POST 数据,则以下表达式将为 TRUE

$_POST == FALSE
Run Code Online (Sandbox Code Playgroud)

资产函数

当给定变量已设置且不为 null 时,isset 返回 bool TRUE。

参数可以是变量、数组元素、字符串偏移量和对象的数据成员。

在 PHP 5.4 中,他们修复了字符串偏移量的行为

$var = FALSE;

isset( $var ) === TRUE;
$var === FALSE;
Run Code Online (Sandbox Code Playgroud)

更多信息请参见 https://www.php.net/manual/en/function.isset.php

空函数

当变量被认为是空或不存在时返回 false。

这些值被视为空:

如果 var 存在并且具有非空、非零值,则返回 FALSE。否则返回 TRUE。

以下值被视为空:

  • “”(空字符串)
  • 0(整数)
  • 0.0(浮动)
  • “0”(字符串)
  • 无效的
  • 错误的
  • array()(空数组)
  • 没有值的声明变量也为空

比较表

$var = FALSE;

isset($var) === TRUE;
empty($var) === TRUE;
$var === FALSE;
Run Code Online (Sandbox Code Playgroud)