现在的位置: 首页 > 综合 > 正文

[归纳]PHP手册重读与整理-表达式和运算符

2017年12月26日 ⁄ 综合 ⁄ 共 2295字 ⁄ 字号 评论关闭

表达式

一切皆是表达式expr。5也是表达式啊,啊?对呀。好吧,听说这是编程行话,那,就用着吧。

运算符

表达式;有返回值。

运算符优先级
结合方向 运算符 附加信息
非结合 clone new clone 和 new
[ array()
非结合 ++ -- 递增/递减运算符
非结合 ~ - (int) (float) (string) (array) (object) (bool) @ 类型
非结合 instanceof 类型
右结合 ! 逻辑操作符
* / % 算术运算符
+ - . 算术运算符 和 字符串运算符
<< >> 位运算符
非结合 < <= > >= <> 比较运算符
非结合 == != === !== 比较运算符
& 位运算符 和 引用
^ 位运算符
| 位运算符
&& 逻辑运算符
|| 逻辑运算符
? : 三元运算符
= += -= *= /= .= %= &= |= ^= <<= >>= 赋值运算符
and 逻辑运算符
xor 逻辑运算符
or 逻辑运算符
, 多处用到

根据讨论区的贡献,说-> ,::是对象属性操作符,有人说应该归类进入运算符,不理解。

为了增强阅读性,我都是使用括号的。

算术运算符

莫非就是+-*/%和取反- 。有两点:

-除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
-取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。

赋值运算符

=,就是这个等于符号了。记得第二门语言的老师才告诉我(高中学那什么玩意儿时候说是等于)这是“赋值”。那些组合运算符,也勉强叫做赋值运算符吧。
位运算符

位运算符
例子 名称 结果
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中不同的位设为 1。
~ $a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。
$a << $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。

这个表表非常好啊。我没其他感想了。嘿嘿。
比较运算符

比较运算符
例子 名称 结果
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a !== $b 非全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。

还有一句,说是:

如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。此规则也适用于 switch 语句。

这个更有意思:

比较多种类型
运算数 1 类型 运算数 1 类型 结果
null 或 string string 将 NULL 转换为 "",进行数字或词汇比较
bool 或 null 任何其它类型 转换为 boolFALSE < TRUE
object object 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明
stringresource 或 number stringresource 或 number 将字符串和资源转换成数字,按普通数学比较
array array 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例)
array 任何其它类型 array 总是更大
object 任何其它类型 object 总是更大

错误控制运算符

@,讨厌它。我有洁癖的。
执行运算符

``,就是它们。一般在生产环境都是关闭掉这个玩意儿的,安全啊。和shell_exec()等同。

递增/递减运算符

--++。没了。大学时候的谭浩强C,为这个讲了好几页,神奇。
逻辑运算符

逻辑运算符
例子 名称 结果
$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

要注意:

-区分与为运算符;

-&&高于 and;

-||高于or。
字符串运算符

. , .=没了。但是在使用 , 时要注意不能在函数调用参数中使用,因为作为分隔参数在用呢。
数组运算符

数组运算符
例子 名称 结果
$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

其中,联合操作时,由于时左联,所以,左边数组和右边数组有有相同的键名时候,该元素不会被覆盖。做的是向后push的操作。

各种等等操作,是kv的比较。
类型运算符

instanceof 用于确定一个 PHP 变量是否属于某一类 class 、父类的子类(extends)、接口(inferface)的实例。

抱歉!评论已关闭.