PHP注释的应用
1.c++风格的单行注释(//)
2.c风格的多行注释(/* */)
3.shell风格的注释(#)
注意:多行注释是不允许进行嵌套操作的,单行注释中的内容不要出现 ?>标志,因为解释器会认为PHP脚本结束,而去执行 ?>后面的代码
运行时页面可能遇到的:
页面无法显示:
没有打开phpstudy或服务器没有开启,localhost指向的是D:phpstudy/WWW,所以phpstudy文件名不可修改
页面出现404找不到
1.文件名被修改
2.电脑中含有多个phpstudy文件(全部删除安装一次)
数据类型
美元符号 是 变 量 的 标 识 符 , 所 有 变 量 都 以 是变量的标识符,所有变量都以 是变量的标识符,所有变量都以符开头,无论是声明变量还是使用变量都应使用$符,变量的数据类型取决于变量的值
PHP一共支持8种原始类型
1.4种标量类型
(1)boolean(布尔型)
这是最简单的类型,只有两个值:真(true)、假(false),其中true和false是PHP的内部关键字
在PHP中不是只有false的值才为假,在一些特殊情况下,如0、0.0、“0”、“ ”、只声明没有赋值的数组等也被认为是false。
(2)字符串型(string)
字符主要包含以下几种类型:
数字类型,如1、2、3
字母类型,如a、b、c
特殊字符,如#、$、%、^
不可见字符,如\n、\r、\t
不可见字符是比较特殊的一组字符,它用来控制字符串格式化输出,在浏览器上不可见,只能看到字符串输出的结果。
字符串就是连续的字符序列,可以是计算机能表示的一切字符的合集,由数字、字母和符号组成,字符串中的每一个字符占用一个字符节,有3种定义字符串的方式:
单引号:$a=‘字符串’;
双引号:$a=“字符串”;
界定符:
$string=<<<str
要输出的字符串
str;
单引号与双引号的区别
双引号:如果存在变量的话,输出变量的值
单引号:原样输出(按普通字符串输出)
对转义字符的使用。使用单引号时,只需对 ‘ 进行转义即可,但是用双引号时,还要注意 “ $等字符的使用,这些特殊字符都要通过转义符 \ 来显示
(3)整型(integer)
整型只能包含整数,这些整数可以是正数或负数,可以用十进制、八进制、十六进制来表示。如果用八进制、数字前面必须加0.如果用十六进制,则需要加0x
如果八进制种出现了非法数字(8和9),则后面的数字会被忽略掉
(4)float/double(浮点型)
浮点型用于存储数字,和整型不同的是它有小数位,它提供的精度比整数大得多,浮点型默认有两种书写格式:
标准格式: 3.1415 -35.8
科学记数法格式: 3.58E1 849.72E-3
2.两种复合类型
(1)数组(array)
一组数据的集合,它把一系列数据组织起来,形成可操作的整体。数组中可以包括很多数据,如标量数据、数组、对象、资源以及php中支持的其他语法结构等。
数组中的每一个数据称为一个元素,元素包括索引(键名)和值两个部分。元素的索引可以由数字或字符串组成,元素的值可以是多种数据类型。定义数组的语法格式如下:
不指定下标:
$array=array("value1","$value2","$value3");
echo $array[下标]; 或 var_dump($array);
下标对应值:
$array=array("index1"=>"value1","index2"=>"$value2","index3"=>"$value3");
(2)对象(object)
对象是类的实例,使用new命令来创建
3.两种特殊类型
(1)资源(resource)
资源是一种特殊变量,又叫做句柄,保存到外部资源的一个引用。资源是通过专门的函教来建立和使用的。在使资源时.系统会自动启用垃圾回收机制,解放不再使用的资源,避免内存消耗殆尽。
(2)空值(null)
空值表示没有为该变量设置任何值,另外、空值不区分大小写。被赋予空值的情况有3种:没有赋任何值,被赋值null、被unset()函数处理过的变量。
unset()函数的作用:从内存中删除变量。 没有返回值
is_null()函数的作用:判断变量是否为null,如果变量为null,则返回true,反之,则返回false。
转换数据类型
**允许转换的类型:**boolean string integer float array object
**转换成boolean型:**null、0和未赋值的变量或数组会被转换成false,其他的为真;
**转换成整型:**布尔型的false转换成0,true转换成1,浮点型的小数部分被舍去,字符型如果以数字类型开头就截取到非数字位,否则输出0.
类型转换还可以通过settype函数来完成,该函数可以将指定的变量转换成指定的数据类型。
bool settype(mixed var,string type);
例:$str="13"; settype($str,"int"); var_dump($str);
使用强制类型转换(操作符)和settype()函数的区别:
使用强制类型转换能直接输出转换后的变量类型,并且原变量不会发生任何变化,而使用settype()函数原变量会被改变。
检测数据类型
PHP内置了检测数据类型的系列函数,可以对不同类型的数据进行检测,判断其是否属于某个类型,如果符合则返回true,否则返回false。
方法 | 作用 |
---|---|
is_srting | 检查变量是否为字符串类型 |
is_null | 检查变量是否为null |
is_object | 检查变量是否为对象类型 |
is_bool | 检查变量是否为布尔类型 |
is_numberic | 检查变量是否为数字或由数字组成的字符串 |
is_float/double | 检查变量是否为浮点类型 |
is_integer/int | 检查变量是否为整数 |
is_array | 检查变量是否为数组 |
常量
**概述:**常量可以理解为值不变的量。常量被定义后,在脚本的其他任何地方都不能改变。
**组成规则:**一个常量由英文字母、下划线和数字组成,但数字不能作为首字母出现,常量名最好是大写的。
**定义:**define(常量名称,常量值,[是否大小写敏感]) //默认敏感
获取常量值:
(1)使用常量名直接获取值
(2)使用constant()函数 constant(常量名称) 参数也可以为存储常量名的变量
**判断常量是否定义:**defined(常量名称);
如果定义了两个相同的常量,那么前者起作用
PHP中可以使用预定义常量获取PHP中的信息,常用的预定义常量有
常量名 | 作用 |
---|---|
__FILE__ | 默认常量,PHP程序文件名(大小写不敏感) |
__LINE__ | 默认常量,PHP程序行数(大小写不敏感) |
PHP_VERSION | 内建常量,PHP程序版本,如3.0.8_dev(敏感) |
PHP_OS | 内建常量,执行PHP解析器的操作系统名称,如Windows(敏感) |
常量与变量的区别
(1)常量前面没有$符号
(2)常量通过define函数定义,不能通过赋值语句
(3)常量可以在任何地方使用,但是变量有作用域的问题
(4)常量一旦定义,常量值就不能发生改变或者重新定义,但是变量可以通过赋值的方式重新定义
(5)常量的值只能是标量数据类型,但是变量支持8种数据类型
变量
**概念:**变量是指程序执行过程中数值可以变化的量。变量通过一个名字(变量名)来标识。系统为程序中的每一个变量分配一个存储单元,变量名实质上就是计算机内存单元的命名。因此,借助变量名即可访问内存中的数据。
**赋值:**变量赋值是指给变量一个具体的数据值。
$name=value;
例:$c=123; $a=“str”;
除了直接赋值外,还有两种方式可以为变量声明或赋值:
(1).变量间的赋值 例:$a=123; b = b= b=a; 指赋值后两个变量使用后个自的内存,互不打扰。
(2).引用赋值
引用的概念是用不同的名字访问同一个变量的内容。当改变其中一个变量的值时,另一个也会跟着发生变化,使用&符号来表示引用。
引用赋值和其他赋值的区别:
其他赋值只是将值赋值给其他变量,当某个变量发生改变时,不会影响其他变量。引用赋值是将一个值取两个变量名,当改变其中一个变量的值时,另一个也会跟着发生变化。
isset()函数:检查变量是否定义
变量作用域
变量在使用时,要符合变量的定义规则。变量必须在有效范围内使用,如果变量超出有效范围,则变量也就失去其意义了。
(1)局部变量
在函数内部定义的变量,其作用域是所在函数
(2)全局变量
被定义在所有函数以外的变量,作用域是整个PHP文件,但是在自定义的函数中是不可以使用的。
在函数内部使用全局变量的方法
(1) global变量名
(2)$GLOBAL(变量名)
(3) use(变量名)function fun(use(变量名){}
(4)设置成超全局变量
(3)超全局变量
作用域在整个PHP文件,在自定义的函数中也可以使用。
(4)静态变量
能够在函数调用结束后仍然保留变量值,当再次回到其作用域时,又可以继续使用原来的值。而一般的变量在函数调用结束后,其存储的数据会被清除,所占的内存空间被释放。使用静态变量时,先用关键字static来声明变量。
(5)可变变量
可变变量是一种独特的变量,它允许动态改变一个变量的名称(变量的变量名可以动态的设置和使用)
原理:该变量的名称由另一个变量的值来确定,实现过程就是在变量的前面再多加一个$
例:$h=“hello”; $hello=“word”; echo $$h; 输出的结果为word
(6)预定义变量
可以获取到用户会话、用户操作系统的环境和本地操作系统的环境等信息
变量 | 作用 |
---|---|
$_SERVER[‘SERVER_ADDR’] | 当前运行脚本所在服务器的IP地址 |
$_SERVER[‘SERVER_NAME’] | 当前运行脚本所在服务器主机的名称 |
$_COOKIE | 通过HTTPcookie传递到脚本的信息 |
$_SESSION | 包含所有会话变量有关的信息 |
$_POST | 包含通过POST方法传递的参数的相关信息 |
$_GET | 包含通过GET方法传递的参数的相关信息 |
$GLOBALS | 由自己定义全局变量组成的数组 |
运算符
1.算数运算符
名称 | 操作符 | 举例 |
---|---|---|
加法 | + | a + a+ a+b |
减法 | - | a − a- a−b |
乘法 | * | a ∗ a* a∗b |
除法 | / | a / a/ a/b |
取余(模以) | % | a a% ab |
递增 | ++ | a + + + + a++ ++ a++++a |
递减 | – | a − − − − a-- -- a−−−−a |
(1).在算术运算符中使用%求余,如果被除数($a)是负数,那么取得的结果也是一个负值
(2).递增、递减运算符,主要对单独一个变量来操作的,递增、递减有两种使用方法:
++、–在前,即先加减再执行其他语句,++、–在后,即先执行其他语句再加减。
2.字符串运算符
字符串运算符只有一个,即英文句号“.”,它将两个字符串连接起来,结合成一个新的字符串。
3.赋值运算符
操作 | 符号 | 举例 | 展开形式 | 意义 |
---|---|---|---|---|
赋值 | = | a = a= a=b | $a=3 | 将右边的值赋给左边 |
加 | += | a + = a+= a+=b | a = a= a=a+$b | 左边的值加右边的值再赋值给左边 |
减 | -= | a − = a-= a−=b | a = a= a=a-$b | 左边的值减右边的值再赋值给左边 |
乘 | *= | a ∗ = a*= a∗=b | a = a= a=a*$b | 左边的值乘右边的值再赋值给左边 |
除 | /= | a / = a/= a/=b | a = a= a=a/$b | 左边的值除右边的值再赋值给左边 |
连接字符 | .= | a . = a.= a.=b | a = a= a=a.$b | 左边的字符连接上右边的字符再赋值给左边 |
取余数 | %= | %a%=$b | a = a= a=a%$b | 左边的值对右边的值取余数再赋值给左边 |
4.逻辑运算符
逻辑运算符用来组合逻辑运算的结果,是程序设计中一组非常重要的运算符。
运算符 | 举例 | 结果为真 |
---|---|---|
&&或and(逻辑与) | KaTeX parse error: Expected 'EOF', got '&' at position 2: m&̲&n | m 和 m和 m和n都为真时 |
||或or(逻辑或) | m ∥ ∥ m\|\| m∥∥n | m 或 m或 m或n有一个为真,或者两个都为真 |
xor(逻辑异或) | $m xor $n | $m$n一真一假时 |
!(逻辑非) | !$m | $m为假时 |
在逻辑运算符中,逻辑与和逻辑或这两个运算符有4种运算符号,其中属于同一种逻辑结构的两个运算符号(例&&和and)之间却有着不同的优先级
5.比较运算符
比较运算符就是对变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回true,反之,则返回false
运算符 | 作用 |
---|---|
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
== | 相等 |
!= | 不等 |
=== | 恒等 |
!== | 非恒等 |
a = = = a=== a===b: a 和 a和 a和b不只是数值上相等,而且两者的类型也得一样。
a = = a== a==b: a 和 a和 a和b的数值相等即可,类型不用一样
a ! = = a!== a!==b: a 和 a和 a和b的或许数值不相等,或许类型不相等
6.错误控制运算符
@错误屏蔽运算符可以对程序中出现的错误的表达式进行操作,进而对错误信息进行屏蔽,其使用的方法就是在错误的表达式前加上@即可,虽然错误依旧存在,但是在输出时并不会显示报错。
7.三元运算符
三元运算符(?:),也称为三目运算符,用于根据一个表达式在另两个表达式中选择一个,而不是用来在两个语句或者程序中选择
例:
echo $a=true ? "true" : "false";
运算符的优先级顺序和结合规则
所谓运算符的优先级是指在应用中哪个运算符先计算哪个,后计算哪个。
PHP的运算符在运算中遵循的规则是:优先级高的运算先执行,优先级低的操作后执行,同一优先级的操作按照从左到右的顺序进行。也可以像四则运算那样使用小括号,括号内的运算最先执行。
函数
概念:
将一些重复使用到的功能写在一个独立的代码块中,在需要时单独调用
格式:
function fun_name(参数1,参数2……){
fun_body
}
调用:
当函数定义好后,只需要引用函数名并赋予正确的参数即可完成函数的调用,在函数调用时,需要向函数传递参数,被传入的参数称为实参,而函数定义时的参数为形参。参数传递的方式有按值传递,按引用传递和默认参数3种。
(1).将实参的值复制到对应的形参中,在函数内部的操作针对形参进行,操作的结果不会影响到实参。即函数返回后,实参的值不会改变。
(2).按引用传递就是将实参的内存地址传递到形参中。这时函数内部的所有操作都会影响到实参的值,返回后,实参的值会发生变化。引用传递方式就是传值时在原基础上加上&即可。
(3).默认参数(可选参数)可以指定某个参数为可选参数,将可选参数放在参数列表末尾,并且指定默认为空。
从函数中返回值return()
return()将函数的值返回给函数的调用者,即将程序控制权返回到调用者的作用域。如果在全局作用域内使用return()关键字,那么将终止脚本的执行。
return语句只能返回一个参数,即只能返回一个值,不能一次返回多个。如果要返回多个结果,就要在函数中定义一个数组,将返回值存储在数组中返回。
变量函数
函数的调用是通过改变变量名来实现的,通过变量名后面加上一对小括号,PHP将自动寻找与变量名相同的函数,并且执行它。如果找不到对应的函数,系统将会报错。这个技术可以用于实现回调函数和函数表等。
对函数的引用
引用不仅可用于普通变量、函数参数,也可以作为函数本身。对函数的引用,就是对函数返回结果的引用。
当不再需要引用时,可以取消引用。取消引用使用unset()函数,它只是断开了变量名和变量内容之间的绑定,而不是销毁变量内容。
函数的优点
1.提高程序的维护性
2.提高软件的可靠性
3.提高程序的可重用性
4.提高程序的开发效率
条件控制语句
if语句
if(expr){
satatement1;
satatement2;
……
}
它按照条件选择执行不同的代码片段,如果表达式expr的值为真,那么就顺序执行statement语句;否则就会跳过该条语句,再往下执行。
在满足某个条件时执行一条语句,在不满足时执行其他语句,这时候就可以使用else语句
if(expr){
satatement1;
satatement2;
……
}else{
satatement1;
satatement2;
……
}
if…else语句只能选择两种结果,要么执行真,要么执行假,但是有时会出现两种以上的选择,这时可以使用else if语句来执行
if(expr){
satatement1;
satatement2;
……
}else if{
satatement1;
satatement2;
……
}
……
else{
satatement1;
satatement2;
……
}
例:
$b=71;
if($b>=90){
echo "优秀";
}else if($b>=60 && $b<90){
echo "良好";
}else{
echo "不及格";
}
switch语句
switch(variable){
case value1:satatement1;
break;
case value2:satatement2;
break;
case value3:satatement3;
break;
……
default:
default satatement;
}
虽然elseif语句可以进行多重选择,但使用十分繁琐。为了避免if语句过于冗长,提高程序的可读性,可以使用switch分支控制语句。
switch语句根据variable的值,依次与case的value值比较,如果不相等,继续查找下一个case;如果相等,就执行对应的语句,直到switch语句结束或遇到break为止。switch语句最终可以设置一个默认值default,如果前面的case中没有找到相符的条件,则输出默认语句。
例:
$b=65
switch((integer)($b/10)){
case 10: echo "A";
break;
case 9: echo "A";
break;
case 8: echo "B";
break;
case 7: echo "C";
break;
case 6: echo "D";
break;
default: echo "不及格";
break;
}
循环控制语句
while循环语句
while(expr){
satatement;
}
while循环语句是PHP中最简单的语句,当表达式expr的值为真时,执行satatement语句,执行结束后,再返回expr表达式继续进行判断。直到表达式的值为假,才跳出循环,执行下面的语句。
例:
$j=1;
while($j<=5){
echo $j." ";
$j++;
}
do…while循环语句
do{
satatement;
}while(expr)
do…while和while的区别在于,do…while要比while语句多循环一次。当while表达式的值为假时,while循环直接跳出当前循环;而do…while语句则是先执行一遍程序块,然后对表达式进行判断。
例:
$j=1;
do{
echo $j." ";
$j++;
}while($j<=5)
for循环
for(expr1;expr2;expr3){
satatement;
}
for循环是PHP中最复杂的循环结构,expr1在第一次循环时无条件取一次值;expr2在每次循环开始前求值,如果值为真,则执行satatement,否则跳出循环,继续往下执行;expr3在每次循环后被执行。
例:
$str="10以内的奇数:";
$str2="10以内的偶数:";
for($i=1;$i<=10;$i++){
if($i%2==0){
$str2.=$i." ";
}else{
$str.=$i." ";
}
}
echo $str."<br>".$str2;
foreach循环语句
foreach循环是PHP4引进来的,只能用于数组。在PHP5中又增加了对对象的支持。
foreach($arr as $key=>$value){
satatement;
}
流程控制的另一种写法
PHP提供了另一种书写格式,包括if、while、for、foreach和switch都可以使用
使用:来代替左边的{,使用endif;、endwhile;、endfor;、endforeach;和endswitch;来代替右边的}
break/continue
在使用循环语句时,有时不确定循环次数,遇到这样的情况可以使用无限循环,只有当程序块满足一定条件后才跳出循环,跳出循环使用的关键字是break和continue
1.break:break关键字可以终止当前的循环,包括while、do…while、for、foreach和switch在内的所有控制语句,break语句不仅能跳出当前的循环,还可以指定跳出的几重循环。例:break $num;
2.continue:continue能终止本次循环,进入下一次循环中。