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中显式的启用。
注意:
()若脚本中包含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(秒数)所在语句时,延缓一定的秒数,继续执行,可以查看一些临时数据。
PHP-----PHP程序设计基础教程----第二章PHP基本语法的更多相关文章
- PHP-----PHP程序设计基础教程----第一章PHP开篇
		
本章内容知识体系如下所示: 一.PHP基础知识 1.1 Web技术 服务器与客户端 服务器:能够提供某种服务的电脑 客户端:想使用服务器所提供服务的电脑 服务器也是一台电脑,必须安装操作系统.否则就是 ...
 - [ABP教程]第二章 图书列表页面
		
Web应用程序开发教程 - 第二章: 图书列表页面 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以下技术开 ...
 - 学习opencv中文版教程——第二章
		
学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...
 - javascript进阶教程第二章对象案例实战
		
javascript进阶教程第二章对象案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过案例练习补充几个之前没有见到或者虽然讲过单是讲的不仔细的知识点. 二.具体实例 温馨提示 面向对象的知 ...
 - java面向对象编程——第二章 java基础语法
		
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
 - 第二章	JavaScript核心语法
		
第二章 avaScript核心语法 一.变量的声明和赋值 JavaScript是一种弱类型语言,没有明确的数据类型,也就是在声明变量时不需要指定数据类型,变量的类型由赋给变量的值决定. 在Java ...
 - Cobalt Strike系列教程第二章:Beacon详解
		
上周更新了Cobalt Strike系列教程第一章:简介与安装,文章发布后,深受大家的喜爱,遂将该系列教程的其他章节与大家分享,提升更多实用技能! 第二章:Beacon详解 一.Beacon命令 大家 ...
 - [Learn Android Studio 汉化教程]第二章:Android Studio概述(一)
		
[Learn Android Studio ]第二章:Android Studio概述(一) Android Studio是一个视窗化的开发环境.为了充分利用有限的屏幕空间,不让你束手束脚,Andro ...
 - python 教程 第二章、 类型
		
第二章. 类型 常量 5,1.23,9.25e-3,’This is a string’,”It’s a string!” 1) 数 整数:2 长整数: 浮点数:3.23,52.3E-4 复数:-5+ ...
 
随机推荐
- this keyword details
			
学生类: package com.itheima_07; /* * 学生类 * * 起名字我们要求做到见名知意. * 而我们现在的代码中的n和a就没有做到见名知意,所以我要改进. * * 如果有局部变 ...
 - JavaScript运算符优先级引起的bug
			
[下面是昨天发给同事的邮件,为防止泄露商业机密,隐去了项目名和变量名] ==================================================== 昨天发现Nx代码中的一 ...
 - MyBatis学习笔记(一)
			
测试Demo的目录结构: com.luohao.config ->MyBatisCongfig.xml ->userMapper.xml com.luohao.Test ->Test ...
 - IDEA创建maven项目时,maven太慢-archetypeCatalog=internal
			
创建项目时候加上archetypeCatalog=internal 参数, archetypeCatalog表示插件使用的archetype元数 据,不加这个参数时默认为remote,local,即中 ...
 - 关于Unity3d的世界空间和本地空间的一点思考
			
最近才开始学Unity3d,被这个本地空间和世界空间搞得有点晕头转向的.于是花了一点时间随便写了一点代码加深理解.代码如下: public class MoveX : MonoBehaviour { ...
 - Java学习---下载文件并且对文件编码
			
import java.io.IOException; import java.net.URLEncoder; import sun.misc.BASE64Encoder; public class ...
 - codeforces 932E Team Work(组合数学、dp)
			
codeforces 932E Team Work 题意 给定 \(n(1e9)\).\(k(5000)\).求 \(\Sigma_{x=1}^{n}C_n^xx^k\). 题解 解法一 官方题解 的 ...
 - C++课堂作业二之反转链表
			
1问题链接: https://www.patest.cn/contests/pat-b-practise/1025 2解题想法: 这题原来用数组打过,现在是想保留暂存数据的数组,然后按顺序提取出来到创 ...
 - PHP_GET后门,躲避任何安全软件
			
经常拿到一些比较好的php站想要留住.插入菜刀一句话,很容易被管理发现,不管是eval还是assert,就是管理发现不了,有时连接也会被各种的安全软件拦截.现在教大家一个简单的技巧.本人一直在用,留的 ...
 - win环境下使用sqlmap写shell + MYSQL提权(默认就是system权限)
			
今天在来一个mysql提权 (也可以说是默认system权限提的) 在被黑站点找到一个站 先教拿shell是有注入漏洞的 有可能是root权限的注入点 可以确定是有注入漏洞的 也得到了 物理路径 ...