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

本文详细介绍了PHP中的各类运算符,包括算术运算符、位运算符、比较运算符等,并阐述了运算符的使用方法及优先级。此外还概述了流程控制结构如if语句、循环结构等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、运算符

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 & $bAnd(按位与)将把 $a$b 中都为 1 的位设为 1。
$a | $bOr(按位或)将把 $a$b 中任何一个为 1 的位设为 1。
$a ^ $bXor(按位异或)将把 $a$b 中一个为 1 另一个为 0 的位设为 1。
~ $aNot(按位取反) $a 中为 0 的位设为 1,反之亦然。
$a << $bShift left(左移) $a 中的位向左移动 $b 次(每一次移动都表示"乘以 2")。
$a >> $bShift 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 < $b小与TRUE,如果 $a 严格小于 $b
$a > $b大于TRUE,如果 $a 严格大于 $b
$a <= $b小于等于TRUE,如果 $a 小于或者等于 $b
$a >= $b大于等于TRUE,如果 $a 大于或者等于 $b
注意:如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。

对于多种类型,比较运算符根据下表比较:

null或string  stringNULL 转换为 "",进行数字或词汇比较
 bool或null任何其它类型转换为bool,FALSE < TRUE
objectobject内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明
string,resource或numberstring,resource或number将字符串和资源转换成数字,按普通数学比较
arrayarray具有较少成员的数组较小,如果运算数 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 $bAnd(逻辑与)TRUE,如果 $a$b 都为 TRUE
$a or $bOr(逻辑或)TRUE,如果 $a$b 任一为 TRUE
$a xor $bXor(逻辑异或)TRUE,如果 $a$b 任一为 TRUE,但不同时是。
! $aNot(逻辑非)TRUE,如果 $a 不为 TRUE
$a && $bAnd(逻辑与)TRUE,如果 $a$b 都为 TRUE
$a || $bOr(逻辑或)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)



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值