博文结构:
2.1 PHP语法风格
2.1.1 PHP标记
PHP有四种风格的标记,具体如表2-1所示:
表2-1 PHP开始和结束标记
标记类型 |
开始标记 |
结束标记 |
示例 |
说明 |
标准标记 |
<?php |
?> |
<?php echo “Hello”; ?> |
服务器不禁用这种标记,兼容性、可移植性、可复用性好 |
短标记 |
<? |
?> |
<? echo “Hello”; ?> |
必须在配置文件php.ini中启用short_open_tag选项 |
ASP式标记 |
<% |
%> |
<% echo “Hello”; %> |
必须在配置文件php.ini中启用asp_tags选项 |
Script标记 |
<script language=”php”> |
</script> |
<script language=”php”>echo “Hello”; </script> |
只需了解,PHP不推荐这种标记 |
在上述四种标记中,只有标准标记和Script标记能保证对任何配置都有效,而段标记和ASP式标记只能在php.ini中显式的启用。
注意:
()若脚本中包含XML语句,避免使用段标记,因为“<?”是XML解析器的一个处理指令。
()PHP和HTML代码可以进行混合编程。
<html>
<body>
<p>Hello HTML</p>
<p><?php echo "Hello,PHP"; ?></p>
</body>
</html>
更常见的用法:
<?php if($age>18): ?>
<p>成年人</p>
<?php else: ?>
<p>小朋友</p>
<?php endif ?>
()浏览器不识别PHP代码,PHP必须在服务器中执行,双击打开PHP文件是达不到效果的。
2.1.2 PHP注释
PHP支持C、C++、Shell三种风格的注释。
①C++风格注释
<?php echo "Hello,PHP"; //输出一句话------行注释 ?>
②C风格多行注释
<?php /* echo "Hello,PHP"; $c=10; 块注释 */ ?>
③Shell风格注释“#”
<?php echo "Hello,PHP"; #输出一句话------行注释 ?>
2.2 PHP标识符与关键字
2.2.1 标识符
标识符:变量名、函数名、类名等。
定义标识符规则:
①标识符可以是任意长度,只能由字母、数字、下划线组成;
②标识符不能以数字开头;
③标识符不能包含空格;
④如果标识符由多个单词组成,建议使用下换线分割;
⑤标识符区分大小写,不过函数名称例外,不区分大小写;
2.2.2 关键字
关键字是编程语言里事先定义好并赋予特殊含义的单词,也称保留字。
2.3 PHP常量
2.3.1 常量的定义
脚本执行周期内,值不会发生变化的量,称为常量。相同的值,定义为常量,可以节省存储空间,如运行模式常量,版本常量,路径常量等。
①语法1
bool define(常量名,常量值,$case_insensitive=false)
上述声明中,常量名、常量值是必须的,参数$case_insensitive是可选的,用于指定常量名称是否对大小写敏感,如果$case_insensitive=true,表示在调用该常量时,常量名对大小写不敏感,否则表示常量名对大小写敏感。默认情况下$case_insensitive=false。
②语法2
const 常量名=常量值
上述声明中,与define定义的常量一样。
注意:
/*
①使用const方式定义的常量的缺点:低版本不支持; ②不能在函数区、流程控制中定义常量; ③按照开发惯例,常量名推荐全部字母大写 ④常量名前面尽量不要加“$” 下面通过示例演示常量的定义
*/
<?php
//定义常量
define('VERSION',"2.0.0");
//打印常量
echo VERSION;
?>
2.3.2 预定义常量
PHP提供了很多预定义的常量,用以获取PHP中的信息,不允许开发人员随意修改。如表2-2所示:
表2-2 PHP中预定义常量的名称及其作用
常量名 |
功能描述 |
__FILE__ |
默认常量,PHP程序文件名 |
__LINE__ |
默认常量,PHP程序中当前行号 |
PHP_VERSION |
内建常量,PHP程序的版本 |
PHP_OS |
内建常量,执行PHP解析器的操作系统的名称 |
TRUE |
该常量是一个真值(true) |
FALSE |
该常量是一个假值(false) |
NULL |
一个null值 |
E_ERROR |
该常量指到最近的错误处 |
E_WARNING |
该常量指到最近的警告处 |
E_PARSE |
该常量指到解析语法有潜在问题处 |
E_NOTICE |
该常量为发生不寻常,但不一定是错误处 |
示例代码如下:
<?php
//获取当前文件路径
echo "当前文件路径是:" . __FILE__;
//获取当前php的版本号
echo "当前PHP的版本是" . PHP_VERSION;
//获取当前操作系统
echo "当前的操作系统是:" . PHP_OS;
?>
2.4 PHP变量
2.4.1 变量的定义
在PHP中,变量是用一个“$”符号和后面的变量名来声明表示,变量名同样区分大小写,命名规则与标识符相同。同时,因为PHP一种弱语言,不需要显式声明,变量的声明和赋值是同时进行的,即直接将一个值通过“=”赋给变量。
$name="欧阳华夏";
$age=28;
$is_Single=true;
$Info=["欧阳华夏",28,true];
注意:
/*
变量默认是传值赋值,即将A变量的值赋给B变量时候,整个A的值被赋值到B;变量还有一种赋值方式是引用赋值,表示B变量引用了A变量,如果一个变量的值发生改变,另外一个变量的值随之发生变化。想要实现变量的引用赋值,需要将“&”符号加到要赋值的变量前。
*/
<?php
$text="Hello";
$new_text=&$text;
?>
变量的读取:
echo的作用是向页面输入字符串
var_dump()输出复杂类型
print_r()输出复杂类型
2.4.2 PHP的数据类型
PHP数据类型共八种,如图2-1所示。标量类型只能存储一个数据,符合类型可以存储一组数据。
图2-1 八种数据类型
1、boolen布尔型
不仅true/false可以表示boolen值,其他类型的数据也可以表示boolen值。例如:0和非0
2、integer整型
可以用十进制、十六进制、八进制或者二进制指定,前面加上“+”和“-”表示正数和负数。
整型最大值: PHP_INT_MAX
3、float浮点型
不能比较两个浮点数是否相等。
4、string字符串型
字符串的定义双引号、单引号都可以。但是二者存在区别。
①包含在双引号的字符串会被解析,包含在单引号的字符串不会解析,下面示例对这句话进行说明:
<?php
$a=9;
$char1="hello$a";
$char2='hello$a';
echo "char1的输出结果是:" . $char1; //char1的输出结果是:hello9----$a被解析
echo "<br/>";
echo "char2的输出结果是:" . $char2; //char2的输出结果是:hello$a---$a未被解析
?>
②对待转义字符不同
- 单引号字符串
- 不支持特殊的转义符号,例如 \n
- 如果要表示一个单引号字符内容,可以通过 \' 表达
- 如果要表示一个反斜线字符内容,可以通过\\ 表达
- 双引号字符串
- 支持转义字符
2.4.3 检测变量的数据类型
变量的数据类型在赋值时候确定,在PHP中提供了一组is_*()函数,括号中参数为要检测的变量,如果检测的变量符号则返回true,否则返回false。
表2-3 检测数据类型的相关函数
函数名称 |
功能描述 |
函数名称 |
功能描述 |
Is_bool(PHP变量) |
检测变量是否属于布尔类型 |
Is_array(PHP变量) |
检测变量是否属于数组 |
Is_string(PHP变量) |
检测变量是否属于字符串类型 |
Is_response(PHP变量) |
检测变量是否属于资源 |
Is_integer(PHP变量) |
检测变量是否属于整型 |
Is_numeric(PHP变量) |
检测变量是否属于数组或者数字组成的字符串 |
Is_null(PHP变量) |
检测变量是否属于空值 |
Is_object(PHP变量) |
检测变量是否属于对象类型 |
Is_float(PHP变量) |
检测变量是否属于浮点类型 |
对null值的检测
为null的几种情况:①变量未赋值;②变量被删除;③变量被赋null;
empty()判断变量是否为空
PHP中认为变量的值为:“”,0,“0”,[],null,false时,变量虽然定义了,但无实际意义,为空。
isset()变量未设置或者设置为NULL时,返回false,其余返回true。变量为空字符串或者0时,此时变量有具体类型,表示已经设置了。
2.5 变量类型的转换
2.5.1 自动类型转换
在PHP中,最常见的自动类型转换情况有三种:转为布尔、转为数值、转为字符串;
1、转为布尔型
转为false的情况:
①整型值:0
②浮点型值:0.0
③空字符串:”“
④字符串:”0“
⑤空数组:[]
⑥不包括任何成员变量的对象
⑦NULL
除此之外,其他值会被转为true。
2、转为数值型
①纯数字组成的字符串转为相应的数字:”123456“----->123456;
②可以转换为浮点型的数字转化为相应的浮点数:”123.456“----->123.456;
③以数字开头的字符串转为对应的数字:”123456欧阳华厦“----->123456;
④不以数字开头的字符串,包括”true“,转为0:”欧阳华厦123456“----->0;
⑤布尔类型值:true--->1;false--->0;
自动转换不改变原始变量的数据类型,仅改变参与运算的数据的类型。
3、转为字符串
①bool类型转换成字符串:true--->"1" false---->"0";
②整型和浮点型转换为字符串:把数字的字面样式转换为string形式。
2.5.2 强制类型转换
PHP中的强制类型转换非常简单,只需要在变量前加一个小括号,并把目标类型填写在括号中实现。表2-4列举了强制转换的类型。
表2.4 强制转换类型
函数名称 |
功能描述 |
函数名称 |
功能描述 |
(boolen) |
强转为布尔型 |
(float) |
强转为浮点型 |
(string) |
强转为字符串型 |
(array) |
强转为数组 |
(integer) |
强转为整型 |
(object) |
强转为对象 |
2.6 PHP运算符
2.6.1 算数运算符
见表2-5:
表2-5 算数运算符
运算符 |
运算 |
范例 |
结果 |
+ |
正号 |
+3 |
3 |
- |
负号 |
-2 |
-2 |
+ |
加 |
5+5 |
10 |
- |
减 |
6-4 |
2 |
* |
乘 |
3*4 |
12 |
/ |
除 |
5/5 |
1 |
% |
取模 |
7%5 |
2 |
有浮点数参与运算的时候,计算结果的数据类型总是浮点型;当整数与整数运算的结果是小数时,其数据类型也是浮点型。
在进行取模运算的时候,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。如(-5)%3=-2,而5%(-3)=2.
2.6.2 赋值运算符
见表2-6:
表2-6 赋值运算符
运算符 |
运算 |
范例 |
结果 |
= |
赋值 |
$a=3;$b=2; |
$a=3;$b=2; |
+= |
加等于 |
$a=3;$b=2;$a+=$b; |
$a=5;$b=2; |
-= |
减等于 |
$a=3;$b=2;$a-=$b; |
$a=1;$b=2; |
*= |
乘等于 |
$a=3;$b=2;$a*=$b; |
$a=6;$b=2; |
/= |
除等于 |
$a=3;$b=2;$a/=$b; |
$a=1.5;$b=2; |
%= |
模等于 |
$a=3;$b=2;$a%=$b; |
$a=1;$b=2; |
.= |
连接等于 |
$a=’abc’;$a.=’def’; |
$a=’abcdef’; |
赋值运算符的作用将右侧表达式结果(从右侧到左侧计算)赋值给左侧变量;
①在PHP语言中可以通过一条赋值语句对多个变量进行赋值; $a=$b=$c=10;
②在表2-7中,除了“=”,其余都是特殊的赋值运算符;
③“.=”表示对两个字符串进行连接操作,生成一个新的字符串并赋值给变量,它又被称为字符串运算符;
2.6.3 递增递减运算符
见表2-7:
表2-7 递增递减运算符
运算符 |
运算 |
范例 |
结果 |
++ |
自增(前) |
$a=2;$b=++$a; |
$a=3;$b=3; |
-- |
自减(前) |
$a=2;$b=--$a; |
$a=1;$b=1; |
++ |
自增(后) |
$a=2;$b=$a++; |
$a=3;$b=2; |
-- |
自减(后) |
$a=2;$b=$a--; |
$a=1;$b=2; |
递增递减字符:
<?php
$x='a';
echo --$x . "<br/>"; //输出为a
echo ++$x . "<br/>"; //输出为b
$x='z';
echo ++$x . "<br/>"; //输出为aa
$x='Z';
echo ++$x . "<br/>"; //输出为AA
$x='abcd';
echo ++$x . "<br/>"; //输出为abce
?>
①在PHP语言中,只支持纯字母(a~z和A~Z)的递增运算;在PHP中对字符进行递减操作时,该操作无效,且操作数的值不变。
②当对字符z和Z进行递增操作时,字符会向前进一位,变成aa后者AA;
③对多个字母组成的字符串进行递增操作时,会针对字符串末尾的单个字符进行递增操作。
递增递减布尔值或者NULL:
①当操作数是布尔类型时,递增递减操作对其值不产生影响;
②当操作数为null时,递增的结果是1,递减不受印象。
2.6.4 比较运算符
见表2-8:
表2-8 比较运算符
运算符 |
运算 |
范例($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 |
①“===”和“!==”比较少见,当$x===$y为true,表示x,y不止数值相等,二者类型也相等,当$x!==$y 为true时,要么数值不相等,要么数据类型不相等;
②在程序中,如果参与比较运算的操作数中含数字类型的数据时,则在比较的过程中,会将所有的操作数转为数值,然后按照数值进行比较;
2.6.5 逻辑运算符
见表2-9:
表2-9 逻辑运算符
运算符 |
运算 |
范例 |
结果 |
&& |
与 |
$a && $b; |
$a和$b都为true,结果为true,否则为false |
|| |
或 |
$a || $b; |
$a和$b中至少又一个为true,结果为true,否则为false |
! |
非 |
! $a; |
若$a为false,结果为true,否则相反 |
xor |
异或 |
$a xor $b; |
$a和$b的值一个为true,一个为false时,结果为true,否则为false |
and |
与 |
$a and $b; |
与 &&相同,但优先级较低 |
or |
或 |
$a or $b; |
与||相同,但优先级较低 |
2.7 流程控制语句
2.7.1 选择控制语句
①if
②if......else
③if......elseif......else
④switch......case
注意:
/*
①if语句中只包含一条语句时,它的大括号是可以省略的。
②使用switch语句过的过程中,如果多个case条件后面的执行语句是一样的,
则该执行语句只需书写一次即可。
③在PHP中,switch语句中的break也可以使用continue代替,作用基本相同。
④在第一个case匹配成功后,没有碰到break语句,会不进行匹配直接执行其后所有case中的语句段,直到switch语句的最后一行或者碰到break语句。
*/
2.7.2 循环语句结构
①while
②do......while
③for
④foreach(专门用来遍历数组)
2.7.3 跳转语句
跳转语句用于实现循环执行过程中程序流程的跳转,在PHP中的跳转语句有break语句、continue语句和goto语句,同时本段再介绍三个函数die\exit\sleep
1、break语句
①当break出现在switch条件语句中时,作用是终止某个case并跳出switch结构;
②当break出现在循环语句中时,作用是跳出当前循环,执行后面的代码;
③break可以接受一个数字参数决定跳出几重循环;
2、cintinue语句
终止本次循环,执行下一次循环
3、goto语句
①goto语句的作用是跳转到程序的另一位置。在目标位置用目标名称加上冒号来标记,跳转语句是goto之后加上目标位置的语句;
②goto语句仅在PHP5.3及以上版本有效;
③goto语句只能在同一个文件或则作用域中跳转,也就是说无法跳出一个函数或者类方法,也无法跳入另一个函数。
<?php
for($i=1,$j=10;$i<20;$i++){
while($j--){
if($j==5) goto end;
}
} echo '$i=' . $i; //不执行
end:
echo '$i=' . $i . ' $j=' . $j; //$i=1 $j=5
?>
4、die / exit
退出代码执行,当前位置之后的所有代码不执行,相当于return,可以用来进行程序运行控制,可以在出错的时候执行此语句,退出代码的执行;
exit可以在退出时候输出变量值,完成函数的执行; exit('结果为:' . $res); //输出 结果为:$res
5、sleep
休眠函数,执行到sleep(秒数)所在语句时,延缓一定的秒数,继续执行,可以查看一些临时数据。