PHP-----PHP程序设计基础教程----第二章PHP基本语法
博文结构:
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中显式的启用。
注意:
(1)若脚本中包含xml语句,避免使用段标记,因为“<?”是xml解析器的一个处理指令。
(2)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 ?>
(3)浏览器不识别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(秒数)所在语句时,延缓一定的秒数,继续执行,可以查看一些临时数据。