1.PHP支持的数据类型
PHP支持的三种数据类型:标量类型、复合类型、特殊类型
标量类型:
- boolean(布尔类型)
- Integer(整型)
- float(浮点型)
- String(字符串类型)
复合类型:
- array(数组)
- object(对象)
特殊类型:
- resource(资源)
- NULL(空值)
伪类型(其他类型)
- mixed(混合类型)
- number(数字类型)
- callback(回调类型)
(1)布尔型
PHP中常用的类型 通常用于逻辑判断 只有true 和 false两个值,表示事物的"真"和"假",并且不区分大小写
0 表示 false , 1 表示 true
某些运算通常返回布尔值 ,并且将其传递给控制流程 用运算符(==)来比较两个运算数,相等返回 True ,否则返回False。
转换成布尔型用 bool 或者 Boolean 来强制转换 ,当转换为布尔型时,以下值会被认为是False:
布尔值False
整型值0(零)
浮点型值0.0(零)
空白字符串和字符串 “0”
没有成员变量的数组
没有单元的对象
特殊类型NULL(包括尚未设定的变量)
(2)整型
整型用来表示整数,它可以由十进制、八进制和十六进制指定,且前面加上 “+” 或 "-"符号,表示正数或负数。
- 八进制数使用0~7表示,且数字前必须加上0
- 十六进制数使用09与AF表示,数字前必须加上0x
示例:
$octonary = 073;//八进制
$decimal = 50;//十进制
$sexadecimal = 0x3b;//十六进制
八进制和十六进制表示的都是十进制数值59
当运算符、函数或者流程控制需要一个整型参数时,值会自动转换
还可以通过函数*intval()*来将一个值转换成整型
(3)浮点型
浮点型可以保存浮点数和整数,浮点数是程序中表示小数的一种方法,也可以是整数,在PHP中,通常有两种方式表示浮点数:标准格式和科学计数法格式。
示例:
$fnum1 = 1.759;//标准格式
$fnum2 = - 4.382;//标准格式
$fnum3 = 3.14E5;//科学计数法格式
$fnum4 = 7.469-3;//科学计数法格式 E-3 表示 (10)^(-3)
- 不管采用哪一种格式来表,浮点数的有效位数都是 14 位
- 有效位数就是从最左边第一个不为0的数开始,直到末尾数的个数,且不包括小数点。
(4)字符串类型
字符串是由连续的字母
、数字
或字符
组成的字符序列。
PHP中通常使用单引号
、双引号
、或者定界符
3种方法定义。
-
单引号
指定一个简单字符串的最简单的方法是用单引号(’)括起来。
示例:
echo 'Hello world'; //输出为Hello world
如果字符串中有单引号,要表示这样一个单引号,和其他很多语言一样,需要用反斜线()转义。
示例:
echo 'I\'m Tom'; //输出为I'm Tom
如果在单引号之前或字符串结尾需要出现一个反斜线(),需要用两个反斜线(\)表示。
示例:
echo 'Path is c:\ windows\system\\'; //输出为Path is c:\ windows\system\
-
双引号
如果用双引号(“)括起字符串,PHP懂得更多特殊字符的转义序列
含义 序号 \n 换行 \r 回车 \t 水平制表符 \ 反斜杠字符 $ 美元符号 " 双引号 \Onnn 此正则表达式序列匹配一个八进制表示的字符 [0-7]{1,3} \xnn 此正则表达式序列匹配一个十六进制表示的字符*\x[0-9A-Fa-f]{1,2}* -
定界符
另一种给字符串定界的方法就是使用定界符语法(<<<)。应该在**(<<<)**之后提供一个标识符,接着是字符串,然后同样的标识符结束字符串。
示例:
<?php //输出为:Hello World echo <<<abc Hello World abc; ?>
2.比较运算符
比较运算符用来对两个变量或表达式进行比较,其结果是一个布尔类型的true或false。
比较运算符及规范
运算符 | 运算 | 范例($x=5) | 结果 |
---|---|---|---|
== | 等于 | $x==4 | false |
!= | 不等于 | $x!=4 | true |
<> | 不等于 | $x<>4 | true |
=== | 恒等 | $x===5 | true |
!== | 不恒等 | $x!==‘5’ | true |
> | 大于 | $x>5 | false |
>= | 大于或等于 | $x>=5 | true |
< | 小于 | $x<5 | false |
<= | 小于或等于 | $x<=5 | true |
在实际开发中还需要注意以下两点:
-
对于两个数据类型不相同的数据进行比较,PHP会自动的将其转换成相同类型的数据在进行比较
如:3 和 3.14 进行比较时,首先会将 3 转换成浮点型 3.0 ,然后再与 3.14 进行比较。
-
运算符 “=”(全等) 与 “!”(不全等)在进行比较时,不仅要比较数值是否相等,还要比较其数据类型是否相等。而“==” 和 “!=”运算符在比较时,只比较其值是是否相等。
3.逻辑运算符
逻辑运算符就是在程序开发中用于逻辑判断的符号,其返回值类型就是布尔类型。
逻辑运算符及范例
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
&& | 与 | KaTeX parse error: Expected 'EOF', got '&' at position 2: a&̲&b | a 和 a和 a和b都为true,结果为true,否则为false |
|| | 或 | a ∥ ∥ a\|\| a∥∥b | a 和 a和 a和b中至少有一个为true,则结果为true,否则为false(惰性运算) |
! | 非 | !$a | 若$a为false,结果为true,否则相反 |
xor | 异或 | $a oxr $b | a 和 a和 a和b一个为true,一个为false,结果为true,否则为false |
and | 与 | $a and $b | 与&&相同,但是优先级较低 |
or | 或 | $a or $b | 与||相同,但优先级较低 |
虽然"&&"、"||“与"and”、"or"的功能相同,但是前者比后者优先级别高。
对于"与"操作和"或"操作,在实际开发中需要注意以下两点:
- 当使用"&&"连接两个表达式时,如果左边表达式的值为false,则在右边表达式不会执行。
- 当使用"||"连接两个表达式时,如果左边表达式的值为true,则右边的表达式不会执行。(惰性运算)
4.选择结构语句
所谓选择结构语句,就是语句中的条件进行判断,进行通过不同的结果执行不同的语句。PHP中常用选择结构语句有 if、if…else、if…elseif…else和switch语句。
(1)if语句
if语句也称为单分支语句,当满足某种条件时,就进行某种处理。
语法:
if(判断条件){
代码块;
}
- 判断条件是一个布尔值,当该值为true时,执行“{}”中的代码块,否则不进行任何处理。
- 当代码块中只有一条语句时,“{}”可以省略。
流程图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HBqf1Brh-1616556005883)(F:\TyporaLocalIMG\image-20210321184320074.png)]
(2)if…else语句
if…else语句也称为双分支语句,当满足某种条件时,就进行某种处理,否则进行另一种处理。
语法:
if(判断条件){
代码块1;
}else{
代码块2;
}
- 当判断条件为true时,执行代码块1。
- 当当判断条件为false时,执行代码块2。
流程图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFQzmbbl-1616556005886)(F:\TyporaLocalIMG\image-20210321185952266.png)]
(3)if…elseif…else语句
if…elseif…else语句也称为多分支语句,用于对多种条件进行判断,并进行不同处理。
语法:
if(条件1){
代码块1;
}elseif(条件2){
代码块2;
}
...
elseif(条件n){
代码段n;
}else{
代码段n+1;
}
- 当判断条件1为true时,则执行代码块1。
- 否则继续判断条件2,若为true,则执行代码段2。
- 以此类推,若所有条件都为false,则执行代码段n+1。
流程图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K2f95zCH-1616556005890)(F:\TyporaLocalIMG\image-20210321185019443.png)]
(4)switch语句
switch语句也是多分支语句,它的好处就是使代码更加清晰简洁、便于读者阅读。
语法:
switch(表达式){
case 值1:代码块1;break;
case 值2:代码块2;break;
...
default: 代码块n;}
- 首先计算表达式的值(该值不能为数组或对象)。
- 然后将获得的值与case中的值依次比较,若相等,则执行case后的对应代码块;若没有匹配的值,则执行default中的代码块。
- 最后,当遇到break语句时,跳出switch语句。
5.数据类型转换
通常情况下,数据类型转换分为自动类型转换和强制类型转换。
(1)自动类型转换
所谓自动类型转换,指的是当运算需要或与期望的结果类型不匹配时,PHP将自动进行类型转换,无需开发人员做任何操作。在程序开发中,最常见的自动类型转换有四种,分别是转换布尔型、转换成 整型,转换成浮点型和转换成字符串型。
示例:
$base = '1800';
$salary = $base + 3600;
//通过 var_dump()函数打印变量的值和数据集类型
var_dump($salary);//输出结果为:int(5400)
- b a s e 是 进 行 加 法 运 算 时 , P H P 会 自 动 将 base 是进行加法运算时,PHP会自动将 base是进行加法运算时,PHP会自动将base转换成整型
- 所以最后输出得结果为int(5400)
当字符串型转换为整型时,若字符串是以数字开始,则使用该数值,否则转换为0。
示例:
if("123abc" == 123){
echo'123';//输出结果为123
}
if("abc" == 0){
echo '456';
}
(2)强制类型转换
所谓强制类型转换,就是在编程程序时手动转换数据类型,在要转换的***数据或变量之前***加上 “(目标类型)” 即可。
列举强制类型转换
强制类型 | 功能描述 |
---|---|
(boolean) | 强制转换为布尔型 |
(string) | 强转为字符串型 |
(interger) | 强转为整型 |
(float) | 强转为浮点型 |
(array) | 强转为数据 |
(object) | 强转为对象 |
示例:
var_dump((boolean)-5.9); //运行结果: bool(true)
var_dump((integer)"hell0");//运行结果:int(0)
var_dump((float)false); //运行结果:float(0)
var_dump((string)12);//string(2)"12"
6.三元运算符
三元运算符又称为三目运算符,它是一种特殊的运算符。
语法:
<条件表达式>?<表达式1>:<表达式2>
- 先求条件表达式的值,如果为真,则返回表达式1的执行结果
- 如果条件表达式的值为假,则返回表达式2的执行结果
7.运算符的优先级
前面介绍了PHP的各种运算符,那么若一个表达式中含有多个运算符时,首先要明确表达式中各个运算符参与运算的先后顺序,我们把这种顺序称为运算符的优先级。
结合方向 | 运算符 |
---|---|
无 | new |
左 | [ |
右 | ++ – ~ (int) (float) (string) (array) (object) @ |
无 | instanceof |
右 | ! |
左 | * / % |
左 | + - . |
左 | << >> |
无 | == != === !== <> |
左 | & |
左 | ^ |
左 | | |
左 | && |
左 | || |
左 | ? : |
右 | = += -= *= /= .= %= &= |= ^= <<= >>= |
左 | and |
左 | xor |
左 | or |
左 | , |
运算符的优先级由上至下递减,同一行的运算符具有相同的优先级
左结合方向表示同级运算符的执行顺序从左到右
右结合方向表示同级运算的执行顺序从右到左
在表达中中,还有一个优先级最高的运算符:圆括号(),它可以提升其内运算符的优先级。
示例:
$num1 = 4+3*2;//输出结果为10
$num2 = (4+3)*2;//输出结果为14
8.while循环语句
所谓循环语句,就是可以实现一段代码重复执行。而while循环语句,就是根据循环条件来判断是否重复执行这一段代码。
语法:
while(循环条件){
执行语句
....
}
- {} 中 的执行语句称为循环体
- 当循环条件为true时,则执行循环体
- 当循环条件为false时,结束整个循环
- 当循环条件永远为true时,会出现死循环
流程图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oK99Ytfc-1616556005895)(F:\TyporaLocalIMG\image-20210322151226444.png)]
while循环语句除了上述形式外,还有do…while形式,虽然两者的功能类似,但是当循环条件为false的情况下,while语句会结束循环,而do…while语句依然会再执行一次。
语法:
do{
执行语句
....
}while(循环条件);
- 首先执行do后面 {} 中的循环体
- 然后判断循环条件,当循环条件为true时,继续执行循环体
- 当循环条件为false时,结束本次循环
流程图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJXnwftE-1616556005898)(F:\TyporaLocalIMG\image-20210322152054105.png)]
9.递增递减运算符
递增递减运算符也称为自增自减运算符,它可以看作是一种特定形式复合赋值运算符。
递增递减运算符及范例:
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
++ | 自增(前) | a = 2 ; a=2; a=2;b=++$a; | a = 3 ; a=3; a=3;b=3; |
++ | 自增(后) | a = 2 ; a=2; a=2;b=$a++; | a = 3 ; a=3; a=3;b=2; |
– | 自减(前) | a = 2 ; a=2; a=2;b=–$a; | a = 1 ; a=1; a=1;b=1; |
– | 自减(后) | a = 2 ; a=2; a=2;b=$a–; | Sa=1;$b=x2; |
- 如果运算符(++或–)放在操作数的前面,则先进行自增或自减运算,再进行其他运算。
- 如果运算符放在操作数的后面,则先进行其他运算,在进行自增或自减运算。
10.for循环
语法:
for(表达式1;表达式2;表达式3){
执行语句
....
}
- 表达式1用于初始化
- 表达式2用于判断循环条件
- 表达式3用于改变表示式1的值
流程图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wV3Vgn1j-1616556005902)(F:\TyporaLocalIMG\image-20210322153934461.png)]
11.跳转语句
跳转语句用于实现循环执行过程中程序流程的跳转,PHP中常用的跳转语句有break和continue语句,它们的区别在于break语句是终止当前循环,跳出循环体;而continue语句是结束本次循环的执行,开始下一轮循环的执行操作。
示例:
$sum = 0; //用于保存1~100内的奇数和
for($i = 1; $i<= 100; ++$i){
if($i % 2 == 0){ //若为偶数,则不累加
continue; //结束本次循环
}
$sum += $i; //累加奇数
}
echo '$sum = '.$sum;
- 使用continue结束本次循环,当为偶数时, i 不 进 行 累 加 , 当 为 奇 数 时 , 对 i不进行累加,当为奇数时,对 i不进行累加,当为奇数时,对i的值进行累加,最终输出的结果为2500。
- 若将示例中的continue修改为break,则当$i递增到2时,该循环终止执行,最终输出的结果为1。
break语句除了上述作用之外还可以指定跳出几重循环。
语句:
break n;
- 参数n表示要跳出的循环数量,在多层循环嵌套中,可使用其跳出多重循环。
12.自定义函数
在程序开发中,通常将某段实现特定功能的代码定义成一个函数。而开发人员根据实际功能需求定义的函数称为自定义函数。
(1)函数的定义
语法:
function 函数名([参数1,参数2,...]){
函数体
}
- function是声明函数时必须使用的关键字
- 函数名的命名规则与标识符相同,且函数名是唯一的
- 参数时外界传递给函数的值,它是可选的,当有多个参数时,各参数间使用英文下的逗号“,”分割。
- 函数体是专门用于实现特定功能的代码
(2)函数的调用
函数在定义完成后,必须通过调用才能使函数在程序中发挥作用。函数调用非常简单,只需要引用函数名,并传入相应的参数即可。
语法:
函数名([参数1,参数2,..])
- “[参数1,参数2,…]”是可选的,用于参数列表,其值可以是一个或多个。
(3)函数的返回值
在调用函数后,若想要得到一个处理结果,即函数的返回值,则需要使用return关键字将函数的返回值传递给调用者。
示例:
//定义sum()函数,用于求两个数的和
function sum($a,$b){
$result = $a + $b;
return $result; //返回处理结果
}
echo sum(23,45); //输出调用函数后的结果
13.字符串函数
字符串函数是PHP的内置函数,用于操作字符串,在实际开发中有着非常重要的作用。
(1)strlen()函数
srtlen()函数用于获取字符串的长度。
示例:
echo strlen('abc');//输出结果:3
echo strlen('好好学习');//输出结果:12
echo strlen('中国,你好');//输出结果:15 默认utf-8
- strlen()函数返回值类型是int整型
- 一个英文字符一个空格长度均为1
- 一个中文字符长度为3
(2)strrpos()函数
strrpos()函数用于获取指定字符串在目标字符串中的最后一次出现的位置,其中,目标字符串中第1个字符的位置从0开始。
示例:
echo strrpos('itcast','a');//输出结果:3
echo strrpos('itcase','c',1);//输出结果:2
echo strrpos('itcase','t',-4);//输出结果:1
- strrpos()函数的返回值类型是int整型,但***找不到指定字符串时,返回值布尔型 false.***
- 第一个参数是目标字符串。
- 第二个参数是指定字符串。
- 第三个参数是字符串开始查找的位置,它有三种情况,具体如下:
- 省略第三个参数时,表示从目标字符串的第0个位置开始向后查找指定字符串
- 第三个参数为正数n时,表示目标字符串的第n个位置开始***向后***查找指定字符串
- 第三个参数为负数m时,表示目标字符串的尾部第m个位置开始***向前***查找指定字符串。
相关函数:
- stripos() 查找字符串在另一字符串中第一次出现的位置( 不区分大小写)
- strpos()查找字符串在另一字符串中第一次出现的位置(区分大小写)
- strripos() - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
(3)substr()函数
substr()函数用于获取字符串的子串。
示例:
echo substr('itcast',2);//输出结果:cast
echo substr('itcast',0,2)//输出结果:it
echo substr('itcast',3,-1);//输出结果:as
echo substr('itcase',-4,-1);//输出结果:cas
- substr()函数的返回值是一个字符串型。
- substr()函数的第一个参数表示待处理的字符串。
- substr()函数的第二个参数表示字符串开始截取的位置,当它为负数m时,表示从处理字符的结尾处向前数第m个字符开始
- substr()函数的第三个参数表示截取字符串的长度,当其省略时,表示截取到字符串的结尾,当其为负数m时,表示从截取后的字符串的末尾处去掉m个字符。
(4)str_replace()函数
str_replace()函数用于字符串中的某一些字符进行替换操作。
示例:
echo str_replace('e','E','welcome',$conunt);//输出结果:wElcomE
echo $count;//输出结果:2
- srt_replace()函数的第一个参数表示目标字符串。
- str_replace()函数的第二个参数表示替换的字符串。
- str_replace()函数的第三个参数表示执行替换的字符串
- str_replace()函数的第四个参数是一个可选的参数,用于保存字符串被替换的次数。
(5)explode()函数
explode()函数可以使用一个字符串分割另一个字符串。
示例:
//① 输出结果:array(3) { [0]=> string(2) "ba" [1]=> string(1) "a" [2]=> string(1) "a" }
var_dump(explode('n','banana'));
//② 输出结果:array(2) { [0]=> string(2) "ba" [1]=> string(3) "ana" }
var_dump(explode('n','banana',2));
//③ 输出结果: array(1) { [0]=> string(2) "ba" }
var_dump(explode('n','banana',-2));
//④ 输出结果:array(1) { [0]=> string(6) "banana" }
var_dump(explode('n','banana',0));
//⑤ 输出结果:array(1) { [0]=> string(6) "itcast" }
var_dump(explode('p','itcast'));
//⑥ 输出结果:bool(false)
var_dump(explode('','itcast'));
- explode()函数的返回值类型是数组类型。所谓数组类型就是可以存储一系列数据的变量类型。
- 第一个参数表示分隔符
- 第二个参数表示要分割的字符串。
- 第三个参数是可选的,表示返回的数组中最多包含的元素个数,当其为负数m时,表示返回除了最后的m个元素外的所有元素,当其为0时,则把它当做1处理。
(6)implode()函数
implode()函数用于指定的连接符将数组拼接成一个字符串。
示例:
$arr = array(1,2,3);//定义一个数组
//echo var_dump($arr);
echo implode(',',$arr);//输出结果:1,2,3
echo implode('.',$arr);//输出结果:1.2.3
- implode()函数的第一个参数表示连接符。
- “ba” }
var_dump(explode(‘n’,‘banana’,-2));
//④ 输出结果:array(1) { [0]=> string(6) “banana” }
var_dump(explode(‘n’,‘banana’,0));
//⑤ 输出结果:array(1) { [0]=> string(6) “itcast” }
var_dump(explode(‘p’,‘itcast’));
//⑥ 输出结果:bool(false)
var_dump(explode(’’,‘itcast’));
* explode()函数的返回值类型是**数组类型**。所谓数组类型就是可以存储一系列数据的变量类型。
* 第一个参数表示分隔符
* 第二个参数表示要分割的字符串。
* 第三个参数是可选的,表示返回的数组中最多包含的元素个数,当其为负数m时,表示返回除了最后的m个元素外的所有元素,当其为0时,则把它当做1处理。
(6)implode()函数
implode()函数用于指定的连接符将数组拼接成一个字符串。
示例:
```php
$arr = array(1,2,3);//定义一个数组
//echo var_dump($arr);
echo implode(',',$arr);//输出结果:1,2,3
echo implode('.',$arr);//输出结果:1.2.3
- implode()函数的第一个参数表示连接符。
- implode()函数的第二个参数表示待处理的数组。