PHP在运算符和语句结构方面的语法与其他语言差别不大,并且由于弱类型语言的机制,在数组、字符串方面的运算更加灵活,强大。这里要注意对位运算的熟悉和加强,有助于对底层技术的学习。函数方面PHP支持值传递和引用传递两种方式,细节方面与强类型语言也有差别,注意区分。
运算符
算术运算符
赋值运算符
除不尽是自动转化为浮点型14位精度(参考学习笔记1中基本数据类型关于精度的解释)
自增自减云算法(分左右)
比较运算符
1 2 3 4 5 6 7
| if ("0"===false) { echo "全等"; } elseif ("0"==false) { echo "相等"; }
|
- 不等于 != <>
- 不全等于(值不相等或类型不相等) !==
1 2 3 4 5 6 7
| if ("0"!=false) { echo "不等于"; } elseif ("0"!==false) { echo "不全等"; }
|
- 大于 >
- 小于 <
- 大于等于 >=
- 小于等于 <=
逻辑运算符
- 与 and &&
- 或 or ||
- 非 !
- 异或(有且仅有一个正确才满足) xor
1 2 3 4 5 6 7
| if ((1>0)xor(2>1)) { echo "两个都对"; } elseif ((1>2)xor(2>1)) { echo "只对一个"; }
|
and和or的运算优先级低于=(赋值)
1 2 3 4 5
| $h= false or true; $i= false || true; echo "h=$h"; echo "i=$i";
|
字符串运算符
拼串,任何类型都会当成字符串,注意.后要有空格
1 2 3 4 5 6 7
| $a="hello"; $b=$a." world"; echo "$b"; $a.=" world"; echo "$a"; echo "<br/>";
|
数组运算符
- 全等(拥有相同的键/值对,且顺序相同类型相同) ===
- 相等(拥有相同的键/值对) ==
1 2 3 4 5 6 7 8 9
| $f = array('1' => 1,'2' => 2); $g = array('2' => 2,'1' => 1); if ($f===$g) { echo "全等"; } elseif ($f==$g) { echo "相等"; }
|
- 不相等(类似集合概念) != <>
- 不全等(键/值,顺序有一项不满足即可) !==
1 2 3 4 5 6 7 8 9
| $f = array('1' => 1,'2' => 2); $g = array('2' => 2,'1' => 1); if ($f!=$g) { echo "不相等"; } elseif ($f!==$g) { echo "完全不同"; }
|
类型运算符
判断某一个变量是否属于某一类,不能用于判断基本数据类型
1 2 3 4
| class Cat{} $j=new Cat; echo $j instanceof Cat;
|
位运算符
需要计算机组成原理中原码、反码和补码相关知识基础,主要包括以下几条规则:
位运算符运算时将十进制整数转换为二进制进行运算,一个整数4个字节(与电脑的操作系统位数相关,这里适用于64位操作系统),每个字节8位,因此一个整数的二进制共32位。
- 最高位表符号(PHP不支持无符号整数) 0正1负
- 正数的原码反码补码都一样
- 负数的反码等于符号为不变,其余位取反
- 负数的补码等于其反码加一
- 0的反码补码都是0
- 计算机运算时都是以补码运算的
1 2 3 4 5
| 举例:-5的二进制 原码10000000 00000000 00000000 00000101 反码11111111 11111111 11111111 11111010 补码11111111 11111111 11111111 11111011
|
- 位与(同1取1否则取0)&
- 位或(同0取0否则取1)|
- 位异或(相同取0不同取1)^
- 位非(取反)~
- 左移(符号为不变,低位补0)<<
语句结构
条件分支语句
1 2 3 4 5 6 7 8
| if (1+1!=2) { echo "1+1!=2"; } elseif (2+2!=4) { echo "2+2!=4"; } else { echo "other"; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| $a=2; switch ($a) { case '1': echo "a=1"; break; case '2': echo "a=2"; break; default: echo "other"; break; }
|
循环结构语句
1 2 3 4 5
| while ($a <= 10) { echo "a=$a"; $a++; }
|
1 2 3 4 5 6 7 8
| while ($a <= 10) { echo "a=$a"; $a++; } do { echo "a=$a"; } while ($a <= 10);
|
1 2 3 4
| for ($b=0; $b < 5; $b++) { echo "b=$b"; }
|
1 2 3 4 5 6
|
$color = array('1' => 'red' , '2' => 'yellow' ,'3' => 'green' ,'4' => 'blue'); foreach ($color as $key => $value) { echo "$key=$value"; }
|
函数
1 2 3 4 5 6
| function f1(){ echo "f1"; } F1(); f1();
|
1 2 3 4 5 6 7
| function f2($default='aaa') { echo "$default"; } f2(); f2('bbb');
|
- PHP默认采用值传递,如需引用(地址)传递,变量名前加取地址符(&)
1 2 3 4 5 6 7 8 9
| $num=0; echo "$num"; function f4(&$temp) { $temp++; } f4($num); echo "$num";
|
- 函数返回值,直接使用return语句,无需在函数头声明返回值类型
- 每次执行函数PHP都会开辟一个新栈,各个栈之间的变量相互独立
- unset()方法可用于销毁一个变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $a=1; function f3() { global $a; $a=2; unset($a); echo "$a"; global $a; echo "$a"; } f3(); unset($a); echo "$a";
|