一、变量
1.1 变量名称
PHP中的变量是由一个“$”后面跟变量名来表示,变量名是区分大小写的。
一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母、数字,或者下划线。
1.2 给变量赋值
1.3 引用赋值
将“&”符号加到将要赋值变量前
1.4 变量的数据类型
$a=1 //$a是整形 $a=1.1 //$a是浮点型 $a="a" //$a现在是字符串型,PHP解析器会自动决定变量的类型
1.5 可变变量
<?php $a='hello'; $$a='world'; echo $a; //输出hello echo $$a; //输出world echo $hello; //输出world ?>
二、常量
2.1 声明常量
可以用define()声明常量
define('NAME','php'); //常量名是一个大写的字符串 echo NAME; //输出php
也可以用const关键字定义常量
const NAME='php'; echo NAME; //输出php
2.2 常量与变量的不同
#常量前没有“💲”符号;
#常量只能用define()函数和const关键字定义,不能通过赋值语句;
#常量一经定义就不能被重新定义或者取消定义
#常量的值只能是标量
2.3 用defined()函数检测常量是否存在
2.4 内置常量
PHP解析器在解析PHP代码之前就会定义一些常量,这些意境定义好的常量叫内置常量,可以随时使用;
(1)-DIR-:指向当前执行的php程序文件所在的目录
(2)-FILE-:当前执行php程序文件名
(3)-LINE-:当前php代码的行数
(4)PHP_VERSION:php版本号
(5)PHP-OS:操作系统名称
三、数据类型(gettype()函数获取变量的类型)
3.1 PHP支持8种原始数据类型
(1)四种标量类型:boolean(布尔型)、integer(整型)、float(浮点型)、string(字符串)
(2)两种复合类型
(3)两种特殊类型
3.1.4 字符串
单引号:‘a’
双引号:“a”
注意:双引号与单引号的区别如下
1.双引号解析变量,但是单引号不解析变量。 2.在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。 3.如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。 4.双引号解析转义字符,单引号不解析转义字符。但,单引号能解析\' 和\ 5.单引号效率高于双引号,尽可能使用单引号 6.双号和单引号可以互插!!!双引号当中插入单引号,单引号当中插入变量,这个变量会被解析。 7.神奇的字符串拼接胶水——(.)点,用来拼接字符串。 8.我们将定界符声明字符串视为双引号一样的功能来看待。
heredoc语法结构:(会对变量解析并对特殊字符转义)
<<<ETO
多行字符串
ETO
newdoc语法结构:
<<<'ETO'
多行字符串
ETO
字符串可以用“.”运算符连接起来
3.1.5 数组
可以用array()函数新建一个数组,数组单元可以通过array[key]或array{key}来访问,用print_r()和var_dump()输出数组。
3.1.6 NUll类型
注意:知道null产生的三种情况,学习empty 和 isset两个函数的区别。
empty()可以向括号中间传入一个变量。这个变量的值如果为false或者为null的话,返回true。
isset()可以向括号中间传入一个或者多个变量,变量与变量间用逗号分开。只要有一个变量为null,则返回false。否则,则返回true。
主要有以下三空情况会产生空(null)类型:
- 通过变量赋值明确指定为变量的值为NULL
- 一个变量没有给任何值
- 使用函数unset()将变量销毁掉
3.2 PHP数据类型之自动转换和强制转换
PHP在PHP 5.x阶段都是完全的弱类型的编程语言。所谓弱类型,就是在声明变量的时候,不需要指定变量的类型。我要声明一个整型的变量,我不用在前面非得写上类型,再写变量。
而PHP 7 的性能有很大的提高。实际测试的结果,PHP 7的性能与PHP5.6相比,提升了性能接近200%。在PHP 7 中有些地方,我们可以强制指定类型,也可以不用强制指定类型来声明变量。
我们接下来讲强制类型转换和自动类型转换两个部份。
布尔值的自动类型转换
自动类型转换,就是数据类型在某种情况下,自动会变为其他的类型参与运算。
自动类型转换的发生时机是:运算和判断的时候某些值会自动进行转换。
下面的情况是布尔值判断时的自动类型转换:
- 整型的0为假,其他整型值全为真
- 浮点的0.0,布尔值的假。小数点后只要有一个非零的数值即为真。
- 空字符串为假,只要里面有一个空格都算真。
- 字符串的0,也将其看作是假。其他的都为真
- 空数组也将其视为假,只要里面有一个值,就为真。
- 空也为假
- 未声明成功的资源也为假
强制类型转换
强制类型转换有三种方式:
- 用后面的三个函数可以完成类型转换,intval()、floatval()、strval()
- 变量前加上()里面写上类型,将它转换后赋值给其他变量
-
<?php //定义一个变量,我们来变化一下试试 $transfer = 12.8; //把浮点变为整型 $jieguo = (int)$transfer; var_dump($jieguo); //把浮点变为布尔 $jieguo = (bool) $transfer; var_dump($jieguo); //把布尔变整型 $bool = true; $jieguo = (int)$bool; var_dump($jieguo); //把浮点变数组 $fo = 250; $jieguo = (array)$fo; var_dump($jieguo); //其他的操作方式,按照文字总结的规律你来试试 ?>//输出int(12) bool(true) int(1) array(1) { [0]=> int(250) }
- settype(变量,类型)直接改变量本身
-
<?php //定义浮点变为整型 $fo = 250.18; //settype第二个参数是int,你实验的时候要记得第二个参数要为字符串类型 settype($fo,'int'); //输出看看结果 var_dump($fo); ?> //输出int(250)
试一试:
- 空转为整型会为整型的0
- 空转为浮点会为浮点的0
- 空转为字符串会为空字符串‘’
- 浮点的123.0转为字符串会为字符串123
- 浮点的123.2转为字符串会为字符串的123.2
- 浮点即使小数点再大,它都会被干掉,会舍掉小数点后面的值
- 如果字符串转为整型的时候,如果数值在前面,会将前面的数值拿出来做为整型的转换值。
- settype(变量,'null'); 等价于 unset()一个变量
- $目标变量 = (类型)$操作变量 只会改变目标变量的类型,不会改变原变量的类型,Settype是改变原值
四、运算符
3.1 算数运算符:+、-、*、/、%、++、--
3.2 字符运算符“.”
3.3 赋值运算符:=、+=、-=、*=、/=、.=、%=
3.4 比较运算符:==、!=、<、>、<=、>=、===、!==
不过在在我们PHP里面多出了一种运算符:
说明 | 符号 |
---|---|
大于 | > |
小于 | < |
大于等于 | >= |
小于等于 | <= |
不等于 | != |
等于 | ==(赋值是=号,所以==规定为等于) |
全等(判断类型等于) | === |
全不等(判断类型不等于) | !== |
3.5 逻辑运算符:&&、AND、||、OR、!、NOR
逻辑运算符比较简单,是我们人类进行逻辑思考时的一种方式。
举例 | 说明 | 详细说明 |
---|---|---|
$x and $y | 逻辑与(并且关系) | $x 和$y 为真则返回真 |
$x && $y | 同上 | 同上 |
$x or $y | 逻辑或 | $x,$y均为false时为假,其他情况全为真 |
$a||$b | 同上 | 同上 |
!$x | 逻辑非 | 取反,即true变为false,false变为true |
$x xor $y | 逻辑异或 | 相同取false,相异为true |
【重点知识】短路
短路就是采用一个懒人模式来思考问题。
逻辑与的特性是:两边为true即为true,其他情况均为假。
逻辑或的特性是:两边为假均为假,其他情况全为真。
我们现在把自己想象成一个懒汉,非常非常懒。来思考逻辑与和逻辑或。可不可以这样理解:
逻辑与(&&):如果前面第一个条件为false了,后面就可以不用执行了,当使用‘&’时两边都会执行。
逻辑或(||):如果前面第一个条件为true了,后面就可以不用执行了,当使用“|”时两边都会执行。
3.6 三元运算符:“?:”
三元运算符和其它运算符
此外还有一些特殊的运算符和符号,我们再来进行讲解。可能以后我们需要用到。
符号 | 说明 |
---|---|
$x? 真代码段:假代码段 | 判断是否为真假 ? 真情况 : 假情况; |
``(反引号) | 反引号中间插代命令,执行系统命令,等价于shell_exec函数 |
@ | 单行抑制错误,把这一行的错误不让它显示出来了,效率低不建议使用 |
=> | 数组下标访问符 |
-> | 对象访问符 |
instanceof | 判断某个对象是否来自某个类,如果是的返回true,如果不是返回false |
3.7 NULL合并运算符:$name=$_GET['name']??false;
3.8 太空舱操作符:用于比较两个表达式,当$a小于、等于或大于$b时分别返回-1、0或1
echo 1<=>1 //0 echo 1<=>2 //-1 echo 2<=>1 //1
五、流程控制
流程控制也叫控制结构,在一个程序中用来控制如果执行语句,它决定了某个语句、表达式是否会被执行或执行的次数;PHP的控制语句分为三类:顺序、条件和循环控制语句。
5.1 条件控制语句 if、else、elseif
<?php if(判断语句1){ 执行语句体1 }elseif(判断语句2){ 执行语句体2 }else if(判断语句n){ 执行语句体n }else{ 最后的else语句可选 } //后续代码 ?>
注:elseif()可以写成else if()。
5.2 条件控制语句switch、case、break、default
<?php switch(变量){ //字符串,整型 case 具体值: 执行代码; break; case 具体值2: 执行代码2; break; case 具体值3: 执行代码3; break; default: } ?>
5.3 while循环语句
<?php //定义需要往返的次数,老外喜欢从0开始计数,我们也从0开始计 $count = 0; //while后面接布尔值判断,为真执行,为假停止 //$count 小于100的时候执行,也就是$count为0至99的时候执行 //如果$count不小于100了,循环停止执行后续的代码 //循环开始处 while($count < 100){ echo '我是王思总,我是第' . $count .'次出差<br />'; //每次执行让$count+1,这样的话,就不会产生$count永远小于100的情况了 $count++; //循环结束 } echo '后续代码'; ?>
while是一个布尔型循环,while(布尔判断)的值为true就执行大括号括起来的代码。如果为假就停出去,执行后续代码。
<?php $i=2; echo '<table border="1">'; while ($i<10) { if($i%2==1){ echo '<tr>'; $i++; }else{ echo '<tr bgcolor="pink">'; $i++; } echo '<td>1</td> <td>2</td> <td>3</td> <td>4</td>'; echo '</tr>';# code... } echo '</table>'; ?>
运行结果:
注:不要写死循环(没有退出条件的循环)
5.4 do...while循环语句
do...while与while的语法结构基本一样,也是一个布尔型循环,功能也基本一样。
do...while与while的区别是,它们的值的检查时机不同。
do-while 不论while判断是否成立,先执行一次代码代码块循环语句,保证会执行一次(表达式的真值在每次循环结束后检查)。
然而我们之前的while循环会检查布尔判断区域,成立则执行。不成立则不执行。
<?php $e=2; do{ echo $e.'do<br/>'; $e++; } while($e<5); echo $e.'<br/>'; //do..while执行完执行这一步 ?> //执行结果: //2do //3do //4do //5
5.5 for循环语句
for($i=1;$i<10;$i++){ for($j=1;$j<=$i;$j++){ echo $i.'*'.$j.'='.$i*$j.' '; } echo '<br/>'; }
语句 | 作用 |
---|---|
exit | exit之前我们讲过了,从当前处停止后续执行 |
break | 之前遇到过,跳出循环或者跳出结构体执行后续代码 |
continue | 跳出此次循环,下次循环继续 |
5.6 foreach循环语句:常用来遍历数组元素
5.7 PHP流程控制之goto语法
<?php for($i=0; $i<100; $i++) { echo '第'. $i .'周往返北京大连<br />'; if($i == 17){ goto end; } } end: echo '集团公司要求停止此项'; ?>
注:
goto 操作符可以用来跳转到程序中的另一位置。
该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。
PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。
六、函数(function)
函数分为自定义函数和系统函数
function 函数名([参数名1[=值1], 参数名2[=值2], 参数名n[=值n]]) { 函数中的功能体 [return 返回值] }
上面的语法规定中有如下特点:
- 函数以function开始
- function后面接空格,空格后接函数名
- 函数名与变量命名规则基本一样,函数名只能是字母,数字,下划线的组合,并且之间不能包含空格,数字不能放在变量名首位,但是不同的是:函数名不区分大小写
- 所谓参数其实就是变量
- 函数名后接括号,括号内跟参数,参数全都有[](中括号)括起来了,代表参数可填可不填
- 如果有参数的话,参数后可以接(=)等号,等号接默认值。参数值也是用[](中括号)括起来的,代表选填
- 函数后的参数变量,主要功能是把函数体外的变量值,传入函数体内来使用,函数体的变量和函数体外的变量通常是两个不同的变量, 函数体的变量与函数体外的变量没有关系。
- 函数中的具体功能(功能体)用大括号括起来,代表这是一个函数的功能区间
- 函数可以有返回值也可以没有返回值,用[](中括号)括起来的,代表选填。
- return后接空格,空格后接返回值,若有return,return后的代码均不执行。
- 函数的执行没有顺序关系,可以在定义处之前的位置调用
- 函数不能被定义两次,即函数不能被重载
6.1 函数的定义:函数是一个相对封闭的程序段,很多函数需要传递参数才能操作。
6.2 向函数传递参数
6.3 通过引用传递参数
6.4 默认参数的值
6.5 参数类型申明
6.6 可变数量的参数列表
6.7 使用全局变量:使用关键global来使用函数外部的全局变量。
6.8 使用静态变量:函数执行完,静态变量中值不会消失,使用关键字static。
6.9 从函数返回值:使用return语句从函数返回值。
function myfunction(){ return 1; } echo myfunction(); //输出1
6.10 可变函数(也叫变量函数)
在PHP中,可以将函数赋值给一个变量,这就是可变函数。在解析PHP代码的时候,如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数。
function myfunction(){ echo 'myfunction'; } $a='myfunction'; $a(); //输出:myfunction 因为$a被替代为myfunction
一个典型的用法,将函数名称放到一个数组中,然后依次调用这些函数。
$functions=['fun1','fun2','fun3']; //假设已经定义了fun1、fun2、fun3函数 foreach($functions as $fun){ $fun(); //依次调用数组中的函数 }
6.11 匿名函数
所谓匿名,就是没有名字。
匿名函数,也就是没有函数名的函数。
匿名函数的第一种用法,直接把赋数赋值给变量,调用变量即为调用函数。
匿名函数的写法比较灵活。
$myfunction=function(){ echo 'myfunction'; }; $myfunction(); //输出myfunction
6.12 回调函数
回调函数,可以配合匿名函数和变量函数实现更加优美、复杂的一种函数结构。
回调函数,就是在处理一个功能的时候,我让让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数配合、协助进行处理。
6.13 内部函数
内部函数,是指在函数内部又声明了一个函数。
注意事项:
- 内部函数名,不能是已存在的函数名
- 假设在函数a里面定义了一个内部函数,不能定用两次函数a。
6.14 PHP自定义函数之变量作用域
- 通过$GLOBLAS来读取外部变量
- 通过$GLOBLAS,在函数内修改外部变量
- 通过$GLOBLAS,在函数内创建全局变量
6.15 递归函数
递归函数,函数体内调用函数自己。
- 代码是从上到下执行的,所有代码没有exit等停止符,函数必须执行完。
- 如果函数从函数A跳至函数B后,必须把函数B执行完成再执行函数A余下的代码。
- 递归函数必须要能执行完有结束条件,不然函数就会限入死循环。函数会永远的自我执行下去。
<?php $fun5=2; function dg($fun5){ $fun5=$fun5-1; if($fun5>0){ dg($fun5); }else{ echo '$fun5的值为'.$fun5.',$fun5终于<=0了<br/>'; } echo '$fun5的值为'.$fun5.',$fun5>0<br/>'; } dg($fun5); ?> //运行结果: //$fun5的值为0,$fun5终于<=0了 //$fun5的值为0,$fun5>0 //$fun5的值为1,$fun5>0
上述代码先执行完$fun5=0,然后执行$fun5=1。
6.16 自定义函数之静态变量
静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行。应用:函数调用次数统计。
6.17 系统内置函数
内置函数的使用:
- 直接返回布尔型,如bool copy ()
- 带有MIXED参数的函数如何调用。Mixed表示任何类型的数据。如Array_unshift()
- 参数中带有&符的参数,一定要传一个变量做为参数。函数里面改变了他的值。
- 带有[]的参数,表示可选项。
- 带有…的参数,表示可以传任意多个参数。
- 带有callback的参数,表示回调函数。需要传一个函数进来。Array_map()
- 函数支持的版本你要了解
来源:https://www.cnblogs.com/LLMjiayou7/p/9303014.html