0%

PHP学习笔记2

PHP在运算符和语句结构方面的语法与其他语言差别不大,并且由于弱类型语言的机制,在数组、字符串方面的运算更加灵活,强大。这里要注意对位运算的熟悉和加强,有助于对底层技术的学习。函数方面PHP支持值传递和引用传递两种方式,细节方面与强类型语言也有差别,注意区分。

运算符

算术运算符

  • + 加
  • - 减
  • * 乘
  • / 除
  • % 取模

赋值运算符

  • =
  • +=
  • -=
  • *=
  • /=
  • %=

除不尽是自动转化为浮点型14位精度(参考学习笔记1中基本数据类型关于精度的解释)

1
2

echo 7/3;//2.3333333333333

自增自减云算法(分左右)

  • ++ 加1
  • -- 减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";//不输出(即false)
echo "i=$i";//1

字符串运算符

拼串,任何类型都会当成字符串,注意.后要有空格

  • .
  • .=
1
2
3
4
5
6
7

$a="hello";
$b=$a." world";
echo "$b";//hello world
$a.=" world";
echo "$a";//hello world
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;//1

位运算符

需要计算机组成原理中原码、反码和补码相关知识基础,主要包括以下几条规则:

位运算符运算时将十进制整数转换为二进制进行运算,一个整数4个字节(与电脑的操作系统位数相关,这里适用于64位操作系统),每个字节8位,因此一个整数的二进制共32位。

  1. 最高位表符号(PHP不支持无符号整数) 0正1负
  2. 正数的原码反码补码都一样
  3. 负数的反码等于符号为不变,其余位取反
  4. 负数的补码等于其反码加一
  5. 0的反码补码都是0
  6. 计算机运算时都是以补码运算的
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

#举例:-5<<3
#补码11111111 11111111 11111111 11111011
#左移11111111 11111111 11111111 11011000
#反码11111111 11111111 11111111 11010111
#原码10000000 00000000 00000000 00101000
#-40
echo -5<<3;//-40
  • 右移(符号位不变,低位溢出,用符号位补高位)>>
1
2
3
4
5
6
7

#举例:5>>3
#补码00000000 00000000 00000000 00000101
#右移00000000 00000000 00000000 00000000
#原码00000000 00000000 00000000 00000000
#0
echo 5>>3;//0

语句结构

条件分支语句

  • if elseif else
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";//输出
}
  • switch
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;
}

循环结构语句

  • while
1
2
3
4
5

while ($a <= 10) {
echo "a=$a";//a=2a=3a=4a=5a=6a=7a=8a=9a=10
$a++;
}
  • do while
1
2
3
4
5
6
7
8

while ($a <= 10) {
echo "a=$a";
$a++;
}
do {
echo "a=$a";//a=11
} while ($a <= 10);
  • for
1
2
3
4

for ($b=0; $b < 5; $b++) {
echo "b=$b";//b=0b=1b=2b=3b=4
}
  • foreach
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=red2=yellow3=green4=blue
}

函数

  • 函数名对大小写不敏感
1
2
3
4
5
6

function f1(){
echo "f1";
}
F1();//f1
f1();//f1
  • 参数(PHP提供默认参数,不传参时采用默认参数)
1
2
3
4
5
6
7

function f2($default='aaa')
{
echo "$default";
}
f2();//aaa
f2('bbb');//bbb
  • PHP默认采用值传递,如需引用(地址)传递,变量名前加取地址符(&)
1
2
3
4
5
6
7
8
9

$num=0;
echo "$num";//0
function f4(&$temp)
{
$temp++;
}
f4($num);
echo "$num";//1
  • 函数返回值,直接使用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";//报错,$a未定义,此处对$a的引用已销毁
global $a;
echo "$a";//2
}
f3();
unset($a);
echo "$a";//报错,$a未定义,此处$a变量已销毁

坚持原创技术分享,您的支持将鼓励我继续创作!