> **注意:**这篇文章对一些初学者来说可能有点乱,因为它假设了对PHP的基本理解。如果你对条件的作用感兴趣,请阅读关于初学者课程中的条件。
支持: | 所有版本:PHP 4、PHP 5、PHP 7 |
---|---|
简要描述: | 一个或多个报表的验证 |
类型: | 语句,结构(不是函数)。 |
通常你需要确定一个等式是否成立或一个语句是否为真,这就是条件的作用。PHP和许多其他语言(尤其是C语言)一样使用以下语法。
if (/* 逻辑声明 */) {// 构建}
每个逻辑表达式都有一个TRUE
(真)或FALSE
(假)的值,没有其他选项。
比较变量$x
是否大于变量$y
的例子。
$x = 10;$y = 5;if ($x > $y) {// 如果条件为真,脚本的这一部分将被执行。} else {// 如果条件不适用,脚本的这一部分将运行。}
条件结构在圆括号内有一个强制性的内容,其中给出了要测试的表达式,由运算符组成(概述如下),多个表达式可以使用逻辑运算符连接(概述如下)。
此外,该条件包含两个可选的语句块。
出于实际原因,当条件为真时,总是至少包括第一个语句块,否则测试表达式就没有意义了。
一般来说。
唯一可能使用分号的符号(除了使用endif结构时)。
if ($x > $y);
然而,这样的条件是没有意义的,因为在这两种情况下,比较的结果将被丢弃,属于该条件的语句不会被执行。
在某些情况下,"如果 "结构可以在省略复合括号的情况下使用。这只有在以下情况下才能实现。
更详细的信息,请参见以下3章。
1.只有一个命令~缩写的语法
如果你在创建一个条件时只想执行一个结构(语句),你可以使用经典的复合括号符号。
if ($x > 10) { $y = $x; }
或者我们可以省略括号。
if ($x > 10) $y = $x;
然而,这种行为只适用于紧邻该条件的一个命令。
一个更好的例子(只有$y = $x
结构体是有条件执行的,其余的总是执行)。
$x = 5;$y = 3;$z = 10;if ($x > $y)$y = $x;$x = 3;
2.冒号和endif;
*
if (/*表达式 */):konstrukt;konstrukt;konstrukt;endif;
然而,这种符号早已被认为是过时的,因为当多个条件浸入自身时,它的方向性会降低。
**注:**我想指出的是,这种风格也受到一些人的喜欢,比如余秋雨(见他的文章)。上帝不允许你在什么地方使用这个。
3.三元表达式~单行 "行内 "符号
偶尔做一个简单的线上比较和其他动作(例如,在定义一个新变量的同时)是很有用的。如果我们只想执行一条语句,即使在保持尽可能简单的情况下,整个程序也可以减少到一行。
$x = 5;$isBiggerThanTwo = ($x > 2 ? true : false);//甚至更短。$isBiggerThanTwo = ($x > 2);//或不含括号。$isBiggerThanTwo = $x > 2;
条件中使用了两种类型的运算符。
运营商 | 意义 |
---|---|
== |
等于 |
=== |
等于并且具有相同的数据类型 |
! = |
不等于 |
>= |
等于或大于 |
<= |
等于或小于 |
> |
大 |
< |
少 |
例子(当"$x不是5 "时有效)。
if ($x != 5) { ... }
运营商 | 替代方案 | 意义 | 真时。 |
---|---|---|---|
&& |
和 | 同时 | 两个值都是真的 |
` | |||
^^ |
XOR | 排他性OR | 至少有一个是真的或假的,但绝不是两个都是。 |
! |
doesn't | 表达式的否定性 | true 当false ,反之亦然 |
() |
*不 * *表达式否定 | 取决于情况 |
一个更复杂的例子。
$x = 5;$y = 3;$z = 8;if ($x > 0 && !($y != 2 && $z == $x) || $z > $y) { ... }
通常我们可以省略任何一个运算符(甚至是两个),但是我们决不能忘记正确的使用规则,以使产生的表达式有效。
一般来说,当测试一个没有运算符的表达式时,我们测试它的值是否为TRUE
或非空(例如,它包含一个非零的数字,一个非空的字符串,...)。
例子。
$x = 5;$y = 3;$z = 8;if ($x) { ... } //通过,因为$x不是空的if ($x && $y) { ... } //通过,因为$x和$y不是空的if (!$x) { ... } //失败,因为TRUE被否定了if (isset($z)) { ... } //通过,因为变量$z存在
但棘手的情况可能会出现,尤其是当。
如果($x)
,而变量$x
包含零(0
),则条件不满足。$x
包含字符串0
(数字0),因为它溢出到0,所以表达式不是真的。我推荐一个简单而有效的解决方案--要求返回的字符数。如果字符串为空(或变量不存在),则返回零字符,条件不满足。简单的例子。
$x = '0';if ($x) { ... } // 条件通常不适用if (strlen($x)) { ... } // 条件是有效的,因为$x包含1个字符
接下来,我们可以使用isset()
函数测试一个变量的存在。
发现琴弦是相同的很容易。
$a = '猫咪';$b = '猫';if ($a === $b) {// 如果这些字符串是相同的} else {// 如果字符串不同}
重要的是,要适当关注数据类型,以防该条目可能等同于其他条目。
例如,空字符串$a = '';
与字符串NULL
不同:$b = NULL;
。我们需要做出这样的区分,例如,因为数据库中的值不存在或为空是有区别的。
$a = '';$b = null;if ($a == $b) {// 它将被评估为TRUE,因为// 数据类型被转换。}if ($a === $b) {// 执行更严格的验证// 而它不会通过,因为它是一个不同的//内容和不同的数据类型,因此// 这段代码将永远不会运行。}
在比较字符串时,忽略空白(不可见)字符也是一个好主意,如空格、制表符和换行符。例如,在输入密码并将其传递给散列函数时,这很有用。
$password = '81dc9bdb52d04dc20036dbd8313ed055'; // 1234$userPassword = '1234';if (md5(trim($userPassword)) === $password) {// trim()函数会自动删除空格。}
有时会发生值不存在的情况(既不是TRUE
也不是FALSE
),它主要是从数据库中获得的值(例如,我们要求一个不存在的列),在这种情况下,将返回数据类型NULL
。
一般来说,NULL'被评估为
FALSE',即条件不适用。然而,这种行为并不总是方便的,因为一个不存在的值并不一定意味着没有记录。
实践中的例子。我们有一个用户档案,我们查询用户的网页。不是所有的用户都需要有一个网页,所以在这种情况下会返回
NULL',但用户仍然存在。所以在这种情况下,我们更应该使用
isset()`函数来测试变量的(不)存在,而不是根据特定的值来做结论。
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | zh