欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php(3)运算符、流程控制

程序员文章站 2022-05-06 12:12:05
...

一、 运算符 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")。
注意:位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。

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总是更大
4、错误控制运算符

PHP 支持一个错误控制运算符:@当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

5、执行运算符

PHP 支持一个执行运算符:反引号(``)。PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回。

6、自增/自减运算符

++$a 前加 $a 的值加一,然后返回 $a
$a++ 后加 返回 $a,然后将 $a 的值加一。
--$a 前减 $a 的值减一, 然后返回 $a
$a-- 后减 返回 $a,然后将 $a 的值减一。
7、逻辑运算符

$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
8、数组运算符

$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)
    statement
directive 部分允许设定 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)