5

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

if ($_POST) {
  do something
}

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

4

6 回答 6

5
于 2012-11-28T07:23:22.600 回答
2
if ($_POST)

如果 POST 数组中有任何元素,这将评估为 true。

if(isset($_POST))

这将始终评估为 true,因为始终设置 POST 数组,但可能包含也可能不包含元素,因此它不等同于第一个示例。

if(!empty($_POST))

然而,这等效于第一个示例,因为empty()检查数组中的内容。

测试页面是否发布到的一个很好的通用方法是:

if($_SERVER['REQUEST_METHOD'] == 'POST')
于 2012-11-28T07:24:33.827 回答
2

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

if 语句 就像我可以想象的任何其他语言一样,if 将参数评估为真或假。

由于 PHP 并不真正知道类型,您可以将任何表达式作为参数,然后将其作为一个整体转换为 bool

以下值被认为是“假”

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

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

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

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

$_POST == FALSE

isset 函数

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

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

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

$var = FALSE;

isset( $var ) === TRUE;
$var === FALSE;

更多在这里 http://de1.php.net/manual/en/function.isset.php

空函数

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

这些值被认为是空的:

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

以下值被认为是空的:

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

比较表

$var = FALSE;

isset($var) === TRUE;
empty($var) === TRUE;
$var === FALSE;
于 2012-11-28T07:56:12.067 回答
1

$_POST:这用于查找是否使用 HTTP POST 方法传递数据,并提取通过该方法发送的变量,这些变量收集在关联数组中

isset:检查变量是设置(定义)还是NULL(未定义)

于 2012-11-28T07:23:04.563 回答
0

如果要检查变量的值但不确定是否已设置,最佳做法是执行以下操作:

if(isset($var) && $var) { ... }

即检查isset()然后检查变量值本身。

这样做的原因是,如果您只是检查变量本身,根据您问题中的示例,如果未设置变量,PHP 将引发警告。警告消息不是致命错误,消息文本可以被隐藏,但通常最好的做法是编写代码,使其不会引发任何警告。

调用isset()只会告诉你是否设置了变量;它不会告诉您有关变量值的任何信息,因此您不能单独依赖它。

希望有帮助。

于 2012-11-28T07:35:04.973 回答
0

PHP.net是一个非常宝贵的信息来源,可用于找出该语言的复杂性和怪癖。

话虽如此,这些并不等同。if 语句将表达式转换为布尔值(有关被认为是错误的信息,请参见此处)。

isset用于“确定变量是否已设置且不为 NULL”。

empty确定变量是否为空,即“它不存在或者它的值是否等于 FALSE”。

于 2012-11-28T07:33:59.967 回答