php(3)运算符、流程控制
一、 运算符 1、算术 运算符 -$a 取反 $a 的负。 $a $b 加法 $a 和 $b 的和。 $a - $b 减法 $a 和 $b 的差。 $a * $b 乘法 $a 和 $b 的积。 $a / $b 除法 $a 除以 $b 的商。 $a % $b 取模 $a 除以 $b 的余数。 注意: 一般情况下除法 运算符 返回浮点数。但
一、运算符
1、算术运算符
-$a | 取反 | $a 的负值。 |
$a + $b | 加法 | $a 和 $b 的和。 |
$a - $b | 减法 | $a 和 $b 的差。 |
$a * $b | 乘法 | $a 和 $b 的积。 |
$a / $b | 除法 | $a 除以 $b 的商。 |
$a % $b | 取模 | $a 除以 $b 的余数。 |
一般情况下除法运算符返回浮点数。但如果两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
取模运算符 % 的结果和被除数的符号相同。即 $a % $b 的结果和 $a 的符号相同。
2、位运算符
$a & $b |
And(按位与) | 将把 $a 和 $b 中都为 1 的位设为 1。 |
$a | $b |
Or(按位或) | 将把 $a 和 $b 中任何一个为 1 的位设为 1。 |
$a ^ $b |
Xor(按位异或) | 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。 |
~ $a |
Not(按位取反) | 将 $a 中为 0 的位设为 1,反之亦然。 |
$a |
Shift left(左移) | 将 $a 中的位向左移动 $b 次(每一次移动都表示"乘以 2")。 |
$a >> $b |
Shift right(右移) | 将 $a 中的位向右移动 $b 次(每一次移动都表示"除以 2")。 |
3、比较运算符
$a == $b | 等于 | TRUE ,如果类型转换后
$a 等于 $b。 |
$a === $b | 全等 | TRUE ,如果
$a 等于 $b,并且它们的类型也相同。 |
$a != $b | 不等 | TRUE ,如果类型转换后
$a 不等于 $b。 |
$a $b | 不等 | TRUE ,如果类型转换后
$a 不等于 $b。 |
$a !== $b | 不全等 | TRUE ,如果
$a 不等于 $b,或者它们的类型不同。 |
$a | 小与 | TRUE ,如果
$a 严格小于 $b。 |
$a > $b | 大于 | TRUE ,如果
$a 严格大于 $b。 |
$a | 小于等于 | TRUE ,如果
$a 小于或者等于 $b。 |
$a >= $b | 大于等于 | TRUE ,如果
$a 大于或者等于 $b。 |
对于多种类型,比较运算符根据下表比较:
null或string | string | 将 NULL 转换为 "",进行数字或词汇比较 |
bool或null | 任何其它类型 | 转换为bool,FALSE TRUE |
object | object | 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明 |
string,resource或number | string,resource或number | 将字符串和资源转换成数字,按普通数学比较 |
array | array | 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例) |
object | 任何其它类型 | object总是更大 |
array | 任何其它类型 | array总是更大 |
PHP 支持一个错误控制运算符:@当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
5、执行运算符
PHP 支持一个执行运算符:反引号(``)。PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回。
6、自增/自减运算符
++$a | 前加 | $a 的值加一,然后返回 $a。 |
$a++ | 后加 | 返回 $a,然后将 $a 的值加一。 |
--$a | 前减 | $a 的值减一, 然后返回 $a。 |
$a-- | 后减 | 返回 $a,然后将 $a 的值减一。 |
$a and $b | And(逻辑与) | TRUE ,如果
$a 和 $b 都为 TRUE 。 |
$a or $b | Or(逻辑或) | TRUE ,如果
$a 或 $b 任一为 TRUE 。 |
$a xor $b | Xor(逻辑异或) | TRUE ,如果
$a 或 $b 任一为 TRUE ,但不同时是。 |
! $a | Not(逻辑非) | TRUE ,如果
$a 不为 TRUE 。 |
$a && $b | And(逻辑与) | TRUE ,如果
$a 和 $b 都为 TRUE 。 |
$a || $b | Or(逻辑或) | TRUE ,如果
$a 或 $b 任一为 TRUE 。 |
$a + $b | 联合 | $a 和 $b 的联合。 |
$a == $b | 相等 | 如果 $a 和
$b 具有相同的键/值对则为 TRUE 。 |
$a === $b | 全等 | 如果 $a 和
$b 具有相同的键/值对并且顺序和类型都相同则为 TRUE 。 |
$a != $b | 不等 | 如果 $a 不等于
$b 则为 TRUE 。 |
$a $b | 不等 | 如果 $a 不等于
$b 则为 TRUE 。 |
$a !== $b | 不全等 | 如果 $a 不全等于
$b 则为 TRUE 。 |
9、类型运算符
instanceof 用于确定一个 PHP 变量是否属于某一类class的实例。
10、运算符优先级
结合方向 |
运算符 |
无 |
clone new |
左 |
[ |
右 |
++ -- ~ (int) (float) (string) (array) (object) (bool) @ |
无 |
instanceof |
右 |
! |
左 |
* / % |
左 |
+ - . |
左 |
> |
无 |
== != === !== |
左 |
& |
左 |
^ |
左 |
| |
左 |
&& |
左 |
|| |
左 |
? : |
右 |
= += -= *= /= .= %= &= |= ^= >= => |
左 |
and |
左 |
xor |
左 |
or |
左 |
, |
二、流程控制
if else语句;
三元运算符:(expr)?(contents):(contents),与C语言类似;
switch case语句;
for、wihle、do while循环;
break、continue跳转语句;
foreach循环:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
return 语句;
require与include语句:作用都是包含并运行指定文件。但处理失败的方式不同,require 在出错时产生
E_COMPILE_ERROR
级别的错误,导致脚本中止执行,而include只产生警告(E_WARNING
),脚本会继续运行。
include_once与require_once语句:与include语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。
goto语句:goto 操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。
ddeclare语句:
declare 结构用来设定一段代码的执行指令。
declare (directive) statementdirective 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks以及 encoding
Tick(时钟周期)是一个在 declare 代码段中解释器每执行
N 条可计时的低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用
ticks=N
来指定的。
不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。
在每个 tick 中出现的事件是由register_tick_function()来指定的。
例:
declare(ticks=1);
// A function called on each tick event
function tick_handler()
{
echo "tick_handler() called\n";
}
register_tick_function('tick_handler');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
输出:tick_handler() called tick_handler() called tick_handler() called 3tick_handler() called tick_handler() called tick_handler() called tick_handler() called
解释一下所谓的低级语句:主要包括statement, function_declare_statement, class_declare_statement。
statement包括:
(1) 简单语句:空语句(就一个;号),return,break,continue,throw, goto,global,static,unset,echo, 内置的HTML文本,分号结束的表达式等均算一个语句。
(2) 复合语句:完整的if/elseif,while,do...while,for,foreach,switch,try...catch等算一个语句。
(3) 语句块:{} 括出来的语句块。
解释上面输出的原因:1、$a = 1;
2、if语句判断条件成立;
3、$a +=2;
4、print语句;(故前面输出3次tick_handler() called后输出$a即3;)
5、if语句条件不成立;
6、函数tick_handler()定义语句;
7、register_tick_handler()语句;
8、declare()语句。(故再次输出4次tick_handler() called)