风之旅人 Android Dev Engineer

3.PHP运算符和流程控制

2019-10-10
PHP

🌴运算符;位运算;流程控制;流程控制替代语法(小九九表格)

运算符

赋值运算符(同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;

位运算

注意:

  1. 系统进行任何位运算的时候都是使用的补码
  2. 运算结束之后都必须转换成原码才是最终要显示的数据

计算机码

  • 计算机码:计算机在实际存储数据的时候,采用的编码规则(二进制规则)

  • 计算机码:原码、反码和补码,数值本身最左边一位是用来充当符号位:正数为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
*/
运算符优先级

https://www.php.cn/manual/view/102.html

流程控制

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等。


相关文章

下一篇 4.PHP文件包含

评论