🌴运算符;位运算;流程控制;流程控制替代语法(小九九表格)
运算符
赋值运算符(同Java)
算术运算符
在进行除法运算或者取余运算的时候,对应的除数(第二个数)不能为0
$a = $b = 10; //连贯赋值运算:两个不同变量
$c = 0;
//var_dump($a / 0); //错误:被除数不能为0
比较运算符
==:左边的与右边的相同(大小相同)
===:全等于,左边与右边相同:大小以及数据的类型都要相同
!=:左边的与右边的不同(大小不同)
!==:不全等于,只有大小或者类型不同
$a = '123'; //字符串
$b = 123; //整型
//判断相等
var_dump($a == $b);
//全等判断
var_dump($a === $b);
逻辑运算符(同Java)
$a = 'weekend';
$b = 'goods';
//逻辑与
var_dump($a == 'weekend' && $b == 'good');
//逻辑或
var_dump($a == 'weekend' || $b == 'good');
//逻辑非
var_dump($b == 'good');
var_dump(!($b == 'good'));
连接运算符
连接运算:是PHP中将多个字符串拼接的一种符号 . :将两个字符串连接到一起 .= : 复合运算,将左边的内容与右边的内容连接起来,然后重新赋值给左边变量
A .= b 相当于 A = A . b
$a = 'hello ';
$b = 123;
echo $a . $b; //将a变量和b变量连接起来
$a .= $b; //$a = $a . $b;
echo $a;
错误抑制符
在PHP中有一些错误可以提前预知,但是这些错误可能无法避免,但是又比希望报错给用户看,可以使用错误抑制符处理。 @:在可能出错的表达式前面使用@符号即可 ; 错误抑制符通常在生产环境(上线)会用到,在开发的时候不会用:系统本身最好没有任何错误。
echo '<hr/>';
$a = 10;
$b = 0;
//$a % $b;
@($a % $b);
三目运算符(同Java)
$a = 10;
$b = $a > 10 ? 100 : 0;
echo $b;
自操作运算符
如果进行除法或者取余运算,那么要考虑右边表达式的结果是否为0(为0出错)
$a = $b = 1;
$a++;
++$b; //独立操作,不参与其他运算
echo $a,$b;
echo '<br/>';
echo $a++,++$b; //$a和$b不只是独立运算,还参与了输出操作
echo $a,$b;
$a = 10;
$b = 5;
$a += $b; //$a = $a + $b = 15;
$a -= $b - 1; //$a = $a - ($b - 1); //15 - 5 + 1 = 11
echo '<br/>',$a,$b;
位运算
注意:
- 系统进行任何位运算的时候都是使用的补码
- 运算结束之后都必须转换成原码才是最终要显示的数据
计算机码
-
计算机码:计算机在实际存储数据的时候,采用的编码规则(二进制规则)
- 计算机码:原码、反码和补码,数值本身最左边一位是用来充当符号位:正数为0,负数为1
- 原码:数据本身从十进制转换成二进制得到的结果
- 正数:左边符号位为0(正数的原码、反码和补码就是原码本身)
- 负数:左边符号位为1
- 反码:针对负数,符号位不变,其他位取反
- 补码:针对负数,反码+1
系统中存在两个0:+0和-0 +0: 00000000 -0: 10000000 原码 取反 11111111 补码 00000000
例如
//计算机码
$a = 5;
$b = -5;
/*
5原码: 00000101
-5原码:10000101
取反: 11111010 //反码:<a style='color:red'>符号位不变</a>,其他位取反
求补: 11111011 //补码:反码+1
*/
位运算符
位运算:取出计算机中最小的单位(位bit)进行运算
&:按位与,两个位都为1,结果为1,否则为0
|:按位或,两个有一个为1,结果为1
~:按位非,一个位如果为1则变成0,否则反之
^:按位异或,两个相同则为0,不同则为1
<<:按位左移,整个位(32位),向左移动一位,右边补0
>>:按位右移,整个位向右移动一位,左边补符号位对应内容(正数补0,负数补1)
按位左移:乘以2的操作
按位右移:除以2的操作(不完全正确):整数除2会出现小数
按位与
var_dump($a & $b);
/*
//取出系统存储的结果进行与操作
5 00000101
-5 11111011
& 00000001 //最终结果
转换:判断符号位,0表示正数(原码),1表示负数(补码)
*/
按位非
var_dump(~$b);
/*
-5 11111011 补码
取反 00000100
原码 00000100
*/
按位右移
var_dump($b>>1);
var_dump($b>>2);
/*
-5 11111011
>>1 11111110 //运算结果:补码
-1 11111101 //反码
取反 10000010 //原码:-2
*/
运算符优先级
流程控制
PHP中”else if”可以连起来写”elseif”
流程控制替代语法
流程控制替代语法:分支和循环结构的替代语法
PHP本身是嵌入到HTML中的脚本语言,需要在HTML中书写一些关于判断或者循环的结构语法,必须符合PHP标签规范,需要HTML与PHP进行混搭,
如果使用原始的PHP代码那么会非常不美观。
需求:打印一个九九乘法表,使用表格来展示
<table border=1>
<?php for($i = 1;$i < 10;$i++){?>
<tr>
<?php for($j = 1;$j <= $i;$j++){?>
<td>
<?php echo $i . ' * ' . $j . ' = ' . $i * $j;?>
</td>
<?php }?>
</tr>
<?php }?>
</table>
在PHP书写到HTML中的这些大括号{}非常不美观,所以PHP提供了一种替代机制,让其可以不用书写大括号:
For(;;){ 👉 for(;;):
} 👉 endfor;
<table border=1>
<?php for($i = 1;$i < 10;$i++):?>
<tr>
<?php for($j = 1;$j <= $i;$j++):?>
<td>
<?php echo $i . ' * ' . $j . ' = ' . $i * $j;?>
</td>
<?php endfor;?>
</tr>
<?php endfor;?>
</table>
类似的还有endif,endswitch等。