《第2章语法.ppt》由会员分享,可在线阅读,更多相关《第2章语法.ppt(88页珍藏版)》请在三一文库上搜索。
1、第2章 语法,在第1章的学习中,介绍了PHP运行平台的选择、安装与配置。同时介绍了相关的PHP开发工具及其特点。通过学习这些知识,为PHP语言的学习打下了坚实的基础。在下面章节的学习中,统一使用第一章中构建的PHP运行环境,以及开发工具来编写PHP文件。 每一项语言学习的第一步都是语法,可见其在语言学习中地位的重要性。语法的学习过程其实就是规则的学习过程。在熟练的掌握了要学习语言的规则后,才可以灵活的使用语言。 PHP的语法相对其他编程语言来说,还是相对简单的。在通过与流行编程语言的比较后,会发现大多数编程语言的语法都大同小异。这对有语言学习基础的读者来说,可以很快进入学习,同时也要注意区别细
2、节部分,以防止错误代码的产生。,2.1 语法基础,每一种编程语言都有其特点,PHP对于初学者来说,入门很简单,但是同时也会为专业的程序员提供高级特性。但无论简单或高级编程,都是以语法为基础的。本章节的学习重点就是语法。,2.1.1 使用PHP输出HTML,通过前面章节的学习,了解了怎么样编写PHP程序,并使之运行的过程。本文提到的PHP文件是以“.php”为扩展名的文件。PHP代码作为服务器脚本在后台运行,运行后得出的数据,通过PHP语言自带的显示函数,输出到浏览器内。在PHP输出HTML可以使用echo()或print()来实现,代码如下所示。 ,2.1.2 使用显示函数输出HTML,使用显
3、示函数输出带有HTML格式的内容,代码如清单所示。 清单 显示函数输出带有HTML格式的内容 输出带有HTML格式的测试字符串; $str3 = 输出带有HTML格式的测试字符串; echo $str1; echo ; echo $str2; print ; print $str3; ?,2.1.3 使用开始符、结束符嵌套HTML,使用开始符、结束符输出HTML,演示代码如下所示。 测试的变量值等于1。 测试的变量值不等于1。 这种方法插入HTML比较简单,不用顾虑单引号和双引号嵌套的问题。其优点在于,不容易产生错误,适用于在PHP里插入大段的HTML代码,特别适用于过程编程方法。但是后期的代
4、码维护有一定的难度。特别是当HTML语句过长时,在编写程序的逻辑代码时容易产生错误。,2.1.4 使用定界符显示HTML,使用定界符输出HTML,演示代码如清单所示。 清单 使用定界符输出HTML的方法 测试字符串 测试字符串 测试字符串 EOD; echo $str; /为定界符定义使用的变量 $name = 爱因斯坦; $dicta = “想象力比知识更重要,因为知识是有限的,而想象力概括着世界上的一切,推动着进步,并且是知识进化的源泉。“; $size = 5; echo $name说:“$dicta” EOT; ?,2.1.5 把PHP嵌入HTML,在HTML里嵌入PHP代码相对来说比
5、较简单,代码如清单所示。 清单 把PHP嵌入HTML 用户交互页面 本页是PHP代码测试页,这一行是使用HTML代码直接输出. ,2.1.6 PHP与JavaScript的交互,JavaScript并不是新推出的脚本语言,但随着AJAX技术的兴起,这种在客户端运行,不浪费服务器端的资源,能建立良好的用户交互界面的脚本,得到了广泛的应用。与此同时网络编程语言与JavaScript变量的交换,也成了讨论的焦点。 PHP与JavaScript的交互大体可分为3种,即:使用PHP生成JavaScript,使用COOKIE进行数据交换,使用临时文件进行数据交换。 PHP生成JavaScript的方法,可
6、以动态生成JavaScript,使得在服务器端的设置,通过客户端的JavaScript表现出来,提升用户体验。在使用时应注意,PHP生成JavaScript脚本的语法,不用与JavaScript语法混合。 使用COOKIE进行数据交换,可以在PHP与JavaScript脚本交换小数据量时使用。因为COOKIE与脚本代码无关,PHP与JavaScript都可以设置和读取COOKIE,使得两种语言在交换数据里,变得很简单。 使用临时文件进行数据交换,原理与使用COOKIE进行数据交换是一样的,只不过临时文件可以存取的数据量更大,样式更丰富。但使用临时文件往往需要更多的操作代码。,2.1.7 使用P
7、HP生成JavaScript,使用PHP生成JavaScript的方法很简单,与PHP输出HTML使用同样的方法,在两种语言嵌套时,应注意不要把语法混合,演示代码如清单所示。 清单 使用PHP生成JavaScript “; echo “var jsVar = 我是JavaScript变量;“; echo “var phpVar = 这是“.$var2.“与JavaScript组成的变量;“; echo “alert(jsVar);“; echo “alert(“.$var1.“);“; echo “alert(phpVar);“; echo “; ?,2.1.8 在PHP与JavaScript
8、中使用COOKIE传递变量,PHP与JavaScript都能访问浏览器里的COOKIE,通过PHP与JavaScript的COOKIE函数,可以轻松的进行交互,演示代码如清单所示。(详细内容请对照本书) 上面的代码演示了怎么样使PHP与JavaScript通过COOKIE进行数据交换。因为PHP在设置COOKIE时,会使用urlEncode对COOKIE的值进行编码,而JavaScript在解析这种编码方面还很困难,或者说是不可能。所以采用了“VBScript”脚本编写的编码解析函数来解决这个问题。使用COOKIE交互数据,在PHP与JavaScript交换少量数据时比较常用到。,2.1.9
9、使用临时文件进行数据交换,这种方法和使用COOKIE进行数据交换方法的原理着不多。只不过,使用临时文件可以交换更大的数据量,可选择性比较强。 PHP的文件操作函数,在权限允许的情况下,可以在服务器端创建、存储和读取文件。用于数据交换的文件也有比较多的格式选择,例如通用的XML格式、JSON格式或使用自定义的格式。下面通过一段代码,简单演示PHP与JavaScript,使用XML文件进行数据交互的例子,演示代码如清单所示。,2.1.10 使用注释,在本章的示例代码中,为了方便读者阅读代码,使用了大量的注释语句。大型的软件系统开发时,代码往往是成千上万行,在这么多的代码中,快速的阅读代码,并找到想
10、要的内容,这就是注释最重要的作用。PHP注释分为单行注释和多行注释,下面的代码段,显示的是几种正确的注释方法。 ,2.2 类型,本节提到的类型是指变量的类型。不同类型的变量存储的值的大小和形式都不一样。而变量的类型通常不是由程序员设定的,是由PHP根据该变量使用的上下文在运行时决定的。 PHP 支持8种原始类型。4种标量类型:boolean(布尔型)、integer(整型)、float(浮点型,也作“double”)、string(字符串);两种复合类型:array(数组)、object(对象);两种特殊类型:resource(资源)、NULL。,2.2.1 布尔型,布尔型的英文名称为:boo
11、lean。布尔型是最简单的变量类型。其取值只有两个:真和假,使用TRUE和FALSE表示。要想为变量指定一个布尔值,只需要为其指定关键字“TRUE”或“FALSE”,并且这两个关键字不分大小写。布尔型变量多用于流程控制,示例代码如下所示。 “; / 使用布尔值进行逻辑控制 if ($flag = TRUE) echo “旗帜已经升起。“; else echo “旗帜还没有升起。”; / 单独使用布尔值进行逻辑控制 if ($run) echo “运行员已经起跑。“; ?,2.2.2 布尔型的类型转换,在很多情况下,程序计算的结果会用来做逻辑运算,这时就需要把不是布尔值的变量转换成布尔值。强制转
12、化布尔值,可以在变量前使用“(bool)”或“(boolean)”来实现。但是很多情况下不需要用强制转换,因为当运算符、函数或者流程控制需要一个布尔型的参数时,该值会被自动转换,这也是PHP语法的一个特色。 但如果遇到强制转换布尔值时,还是需要仔细检查,以防程序出现错误。当转换为布尔值时,以下值被认为是 FALSE: 整型值:0(零)。 浮点型值:0.0(零)。 空白字符串和字符串:“0” 。 没有成员变量的数组。 特殊类型NULL(包括尚未设定的变量)。 所有其他值都被认为是TRUE(包括任何资源)。,2.2.3 整型,整型的英文名称为:integer。整型变量的值,使用集合表示就是Z =
13、., -2, -1, 0, 1, 2, .。也就是正整数、0与负整数中的任意一个数。整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号“-”或者“+”,如果用八进制符号,数字前必须加上0(零),用十六进制符号数字前必须加上0x。下面演示部分整数使用整型来进行文字表达的方法,代码如下所示。 ,2.2.4 整型的类型转换,在有些情况下,需要对整型数值进行强制类型转换,或者根据上下文自动转换。为了保证程序的正常运行,需要对转换后的类型加以确认。下面介绍的是两种整型自动转换的例子。 (1)当整型变量溢出时,变量类型会自动转换成 float也就是浮点型。如果给定的一个数或执行运算得出的
14、结果,超出了整型的范围,就称为溢出。在出现溢出后,PHP会自动转换类型来保证数据的正确。下面演示的是分别使用十进制、十六进制表达整型变量正常及溢出的情况,,2.2.5 浮点型,浮点型的英文名称为:float。中文名称也可以称为浮点数、双精度数或实数,可以用以下语法定义,定义代码如下所示。 浮点数的字长和平台相关,通常最大值是1.8e308并具有14位十进制数字的精度。关于浮点数精度,要特别注意,在2.2.4小节中,将运行结果还没有确定的表达式转换为整型时,出现了精度的问题。简单的十进制分数如0.1或0.7,不可能在不丢失精度的情况下转换为内部二进制的格式,这就会造成输出结果的失真,如floor
15、(0.1+0.7)*10)通常会返回7而不是8。 虽然浮点数能表达的值比整型多,但也有其限制,如1除3后会产生无限小数,就不可能使用浮点数表示了。所以不要相信浮点数结果精确到了最后一位,也不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者gmp函数。,2.2.6 浮点型的类型转换,浮点型的类型转换比较简单,字符串型转换为浮点的方法,会在2.2.4小节中介绍。而其他类型的值转换为浮点型时,应先将值转换成整型,然后再转换成浮点。,2.2.7 字符串,字符串的英文为:string。其值是一系列字符。其范围在PHP中没有强制限制,所以在操作字符串时,不用担心其长度过长的问
16、题。在上面的章节中,已经接触过字符的定义方法,总结一下,共分为3种:单引号、双引号和定界符。 (1)单引号:定义字符串的最简单的方法是把字符用单引号()括起来。如果在定义的字符串中出现单引号,就需要使用转义操作符()进行转义后,才能正常输出。使用单引号定义的字符串中出现的变量和转义序列不会被变量的值替代。 (2)双引号:使用双引号(“)括起字符,同样可以定义字符串。与单引号定义字符串相同,如果在定义的字符串中出现了一个双引号,就需要使用转义操作符进行转义。而在字符串中出现其他的特殊字符,可以对照表2-1进行转义操作。 (3)定界符:使用定界符定义字符串,在前边的章节已经使用过。,2.2.8 字
17、符串与双引号,在使用单引号和双引号定义字符串时,在使用的时候会有不同的表现,下面演示的是单引号与双引号定义字符串的方法和转义字符串的使用,代码如清单所示。,2.2.9 字符串与定界符,定界符由开始标识符和结束标识符组成。开始标识符由“,2.2.10 简单语法与复杂语法,简单语法比较通用和方便,其不仅能解析变量,还可以解析数组索引或者对象属性。对于数组索引,右方括号()标志着索引的结束。对象属性和方法和简单变量使用方法相同。定界符中,在输入法为半角英文状态下输入的代码中插入变量,可以使用简单语法。 对于比较复杂的情况,可以使用复杂语法。复杂语法可以用花括号括起一个表达式。不是因为语法复杂而称其为
18、复杂,而是因为用此方法可以包含复杂的表达式。 复杂语法可以在字符串中包含任何值,包括表达式。在一个字符串中出现中文,那么可以使用复杂语法在字符串中添加变量,演示代码如2.2.9小节中的清单所示。因为这种方法很少使用,在此就不多做介绍。 注意:这两种方法只适用于双引号或者定界符指定的字符串。,2.2.11 字符串型的类型转换,可以用(string)标记或者strval()函数将一个值转换为字符串。当使用echo()或者print()函数时,或者将一个变量值与一个字符串进行比较的时候,字符串的转换会在表达式范围内自动完成。在类型自动转换和强制转换时,一定要注意转换后变量的值。下面演示的是,在强制转
19、换各个类型为字符串时,产生的值的情况,代码如下所示。,2.2.12 数组,数组是一组具有相同数据类型元素组成的一个有序图。PHP中的图是一种把 values(值)映射到 keys(键名)的类型。数组通过使用array()函数定义,其值使用“key=value”的方式设置,多个值通过逗号分割。数组的定义,如以下代码所示。 “banana“, “red“=“flower“, “3“=“三“, “03“=“叁“ ); /直接为数组赋值 $two = array(1,2,3,4,5,6,7,8,9); /带有一个键名的数组 $three = array(6=“六“,“七“,“八“,“九“,“十“);
20、?,2.2.13 简单的数组操作,数组的简单操作包括显示、添加、修改和删除,演示代码如下所示。 ,2.2.14 遍历数组,遍历数组,就是把数组中的值,通过某种方法一一展现。数组的应用,大多都要求对数组进行遍历。遍历数组的方法很多,在本书的2.8节中会有其他方法的介绍,本小节只介绍使用foreach()函数遍历数组的方法,代码如清单2.12所示。 清单2.12 遍历数组 $value) echo “值$value的键名是$key“; /使用foreach遍历数组,只取值 foreach($colors as $value) echo “没有键名,只有值:$value“; ?,2.2.15 数组的
21、类型转换,要把其他类型转换为数组,可以使用(array)标记,各个类型在转换后的数组会有所差别,代码如清单所示。,2.2.16 多维数组,多维数组与数组的定义、操作方法都相同。通过演示代码,可以了解多维数组的定义和操作过程,代码如下所示。 array(1,2,3,4,5,6,7), “colors“ = array(“红“,“蓝“,“绿“,“黄“,“紫“,“青“,“橙“) ); /遍历一个多维数组 foreach($more as $arrays) foreach($arrays as $key=$value) echo $value; /显示多维数组的值 echo $more“numbers
22、“5; echo $more“colors“5; /删除多维数组的值 unset($more“numbers“0); ?,2.2.17 对象,在PHP中,要使用“new”把对象实例化到一个变量中,代码如下所示。 height = 170; /初始化对象 $newHuman = new human(); /访问对象属性 echo $newHuman-height; /访问对象的方法 $newHuman-setHeight(); echo $newHuman-height; ? 对象是通过实例化后的变量来操作的,关于对象与类的更多操作,可以参见本书的第3章。,2.2.18 对象的类型转换,其他类型
23、转换为对象,可以使用(object)操作符实现,代码如清单所示。 清单 其他类型转换为对象,2.2.19 资源,资源是一种特殊变量,其值是一个到外部资源的引用。通过专门的函数,可以建立资源并对其进行访问,能建立资源的函数很多,在本书的其他章节有所介绍,本小节使用fopen()函数来建立一个资源,代码如下所示。 ,2.2.20 NULL,NULL是一个特殊的值,在给变量赋与此值时,代表该变量没有值。此类型唯一的,也是仅有的值就是NULL。可以通过is_null()函数来判断当前变量,是否为NULL值,代码如下所示。 ,2.2.21 变量类型之间的转换,关于类型的转换,在讲解类型的时候,已经进行了
24、介绍。在PHP中的变量,会根据上下文的判断,自动设置变量的类型。强制转换类型也可以使用以下操作符实现。 (int)、(integer):转换成整型; (bool)、(boolean):转换成布尔型; (float)、(double)、(real):转换成浮点型; (string) :转换成字符串; (array) :转换成数组; (object) :转换成对象; 注意:强制转换操作符的括号内允许有空格和制表符的出现。,2.3 变量,程序运行时,会在内存中存储两种形态的信息。经过定义,在程序运行中不再改变的值,称为常量;而根据各种条件,会发生变化的值称为变量。PHP中的变量由“$”符号和变量名来
25、表示。其引用的就是存储该变量的内存地址。,2.3.1 命名规则,变量的命名与PHP其他标签遵守相同的规则,正确的变量名由“$”符号,后面跟随以字母或下划线开头的,任意数量的字母、数字、下划线。其中字母的范围是小写字母a-z和大写字母A-Z,使用ASCII码表示就是从127-255;下划线是指“_”;数字是从0-9取值。通过下面的演示,说明一下变量的命名规则,代码如下所示。 ,2.3.2 变量类型,变量的基本类型有布尔型、整型、浮点型、字符串、数组五种,加上扩展的对象、资源、NULL3种,一共有8种变量类型可供选择。 PHP的变量类型,会根据程序运行的上下文自动改变。有例外的情况,也在上一节中进
26、行了介绍。要特别注意的是,有些类型是不能强制转换的,例如:资源。 变量在使用前一般都经过初始化,但是没有经过初始化的变量,在参与表达式的运算时,一定要注意其值的变化,下面代码演示的是,各类型变量没有初始化参与运算时的值的情况,,2.3.3 变量范围,一个变量初始化后,其作用范围就确定下来了。下面演示的是变量定义后的有效范围,代码如清单所示。 清单 在包含文件中定义变量 ,2.3.4 全局与超全局变量,要想在函数内部访问外部变量,可以使用“global”关键字或访问超全局变量来实现,代码如清单所示。,2.3.5 静态变量,静态变量属于变量的一种。变量在程序执行时,离开其作用域,其值将会改变或消失
27、。而静态变量恰恰相反,在程序执行时,离开其作用域时,其值不会丢失。通过以下代码,可以更清楚的了解这个过程,代码如清单所示。,2.3.6 可变变量,在不确定一个变量的名称时,可以使用可变变量,通过演示代码,可以了解可变变量的设置和使用方法,代码如清单所示。 清单 可变变量演示 ,2.3.7 外部变量,在程序中定义或自动产生的变量称为内部变量。由HTML表单、URL或外部程序产生的变量称为外部变量。可以通过预定义变量“$_REQUEST”、“$_POST”、“$_GET”获取外部变量,代码如清单所示。,2.4 预定义变量,预定义变量是由PHP预设的一组数组,其数据包括运行环境、用户输入数据等。因其
28、作用范围是全局生效,所以又称为超全局变量或自动全局变量。,2.4.1 服务器变量:$_SERVER,服务器变量是由网络服务器创建的数组,其内容包括头信息、路径、脚本位置等。不同的网络服务器提供的信息有所出入,本书以Apache服务器提供的作为标准。,2.4.2 环境变量:$_ENV,环境变量是预定义的一个数组,记录着系统路径等信息。使用print_r()函数,可以查看具体的环境变量的数组成员。其数组成员主要包括:ALLUSERSPROFILE,BID,CommonProgramFiles,COMPUTERNAME,ComSpec,FP_NO_HOST_CHECK,NUMBER_OF_PROCE
29、SSORS,OS,Path,PATHEXT,PROCESSOR_ARCHITECTURE,PROCESSOR_IDENTIFIER,PROCESSOR_LEVEL,PROCESSOR_REVISION,ProgramFiles,SystemDrive,SystemRoot,TEMP,TMP,USERPROFILE,VS80COMNTOOLS,windir,AP_PARENT_PID。 单独访问环境变量的数组成员,可以通过“$_ENV成员变量名”的方式实现,代码如下所示。 ,2.4.3 HTTP Cookies变量:$_COOKIE,使用PHP的COOKIE函数或其他程序产生的COOKIE值,都
30、保存在“$_COOKIE”数组中,使用print_r()函数,可以查看当前设置的COOKIE值的情况。可以通过“$_COOKIE变量名”的方式访问COOKIE值,演示代码如下所示。 ,2.4.4 HTTP GET变量:$_GET,通过URL提交的变量,或表单使用“GET”方法生成的变量,都会以数组的形式保存在$_GET 变量中。使用print_r()函数,可以查看当前$_GET变量值的情况。也可以通过“$_GET变量名”的方式访问单独访问$_GET中的变量值,演示代码如下所示。 其他语言也可以模拟GET方法,向PHP程序提交HTTP GET变量。,2.4.5 HTTP POST变量:$_POS
31、T,单使用“POST”方法生成的变量,都会以数组的形式保存在$_POST 变量中。使用print_r()函数,可以查看当前$_POST变量值的情况。也可以通过“$_POST变量名”的方式访问单独访问$_POST中的变量值,演示代码如下所示。 其他语言也可以模拟POST方法,向PHP程序提交HTTP POST变量。,2.4.6 HTTP文件上传变量:$_FILES,由HTML表单生成的文件上传变量,以数组的形式记录了上传文件的详细信息,其数组成员包括上传的文件名:name;文件类型:type;临时文件名:tmp_name;错误信息代码 :error;文件大小:size。下面介绍使用HTML表单,
32、生成文件上传变量的方法, 要使表单产生文件变量,要满足三个条件: HTML表单要使用POST方式传递数据。 表单的“enctype”参数要设置为“multipart/form-data” 。 表单中包含一个文件选择框。 通过$_FILES变量获取上传文件相关信息后,就可以配合其他文件函数实现文件的上传。,2.4.7 Request变量:$_REQUEST,作为超全局变量,$_REQUEST存储了包括$_POST、$_GET、$_COOKIE变量在内的数据。通过访问$_REQUEST,也可以实现$_POST、$_GET、$_COOKIE变量的功能。 虽然$_REQUEST在使用时比较方便,但是其
33、提供的数据存在一定的危险性。比如一段程序使用$_REQUEST读取$_COOKIE值时,那有心的访客可以通过提供一个$_GET变量来模拟$_COOKIE值,从而取得一定的访问权限。,2.4.8 Session变量:$_SESSION,由PHP的SESSION函数产生的数据,都以超全局变量的方式,存放在$_SESSION变量中,使用print_r()函数,可以查看当前设置的SESSION值的情况。可以通过“$_SESSION变量名”的方式访问SESSION值,演示代码如下所示。 关于如何在PHP中创建和使用SESSION,本书的第6章有详细介绍。,2.4.9 Global变量:$GLOBALS,
34、$GLOBALS变量以数组的形式,记录了所有已经定义的全局变量,而变量名就是这个数组的索引。即然$GLOBALS记录着所有的全局变量,那么理所当然的也可以访问全局变量里的信息,下面介绍使用$GLOBALS访问其他预见定义变量的方法,代码如下所示。 $GLOBALS把SESSION及其他全局变量,作为数组中的一员过行访问。可以通过print_r()函数,查看当前$GLOBALS存储值的情况。,2.5 常量,常量的定义已经在2.3节中进行了介绍。虽然在程序中,常量不被经常使用,但程序中不变得一些参数,如数据库用户和密码等数据,也是可以使用常量来存储的。利用常量定义后不能更改的特性,还可以把其使用在
35、程序运行安全方面。,2.5.1 定义和使用常量,常量使用define()函数进行定义,操作格式为:“define(“常量名“,“常量值“);”。常量的命名,以字母或下划线开始,后边跟随其他任意字母、下划线和数字。常量的名称对大小写敏感,按照惯例常量标识符总是大写。下面分别演示正确的和错误的常量命名,代码如下所示。 ,2.5.2 预定义常量,预定义常量也称为魔术常量。预定义常量使用的方法虽然与常量相同,但是其值会根据使用的情况而产生变量。所以从严格意义上讲,不能称其为常量。经常使用到的常量有五个,通过下面的代码,来介绍其使用方法,代码如清单所示。,2.6 表达式与运算符,在PHP中,所有有值的都
36、可以称为表达式。而表达式大部分都是由变量与运算符组成的。本节主要介绍表达式的组成形式和运算符的使用方法。,2.6.1 表达式的组成,根据表达式的定义,变量赋值,就是最简的表达式,而复杂表达式的例子就是函数了。下面举例说明一下表达式的各种形式,代码如下所示。 表达式的形式有很多,产生的值也有很多可能,在使用的时候要注意表达式值的变化,才能正确的进行逻辑判断,避免程序产生错误。,2.6.2 运算符优先级,运算符指得是能返回一个值的结构。这个结构当然也包括能返回值的函数。但类似于echo()、print()、print_r()等函数不在此列。 运行符包括一元运算符、二元运算符、三元运算符三种类型。一
37、元运算符只能对一个数进行类似取反或加1的运算,二元运算符使用最多的。二元运算符在表达式的运算中,是根据运算符优先级来计算的。三元运算符是的形式是:“表达式1?表达式2:表达式3”,其会根据第1个表达式,来选择第2个或第3个表达式作为其本身的值,三元运算符在以后的章节中,会有详细的介绍。 运算符规则:先进行高优先级运算符的计算,再进行低优先级运算符的计算,如果运算符级别相同,按照从左到右的顺序计算。可以使用“()”符号来改变优先级。,2.6.3 算术运算符,算术运算符包括6种最基本的运算加(+)、减(-)、乘(*)、除(/)、取模(%)、取反(-)。下面演示这6种运算符的使用方法,代码如下所示。
38、 ,2.6.4 赋值运算符,顾名思义,赋值运算符的作用就是,把右边表达式的值赋与左边的表态式。其运算符号是“=”,及其他组合的符号“+=”、“-=”、“.=”等。赋值运算符使用的比较广泛,下面演示赋值运算符的使用方法,代码如下所示。 ,2.6.5 位运算符,位运算可以操作整型和字符串两种类型。其运算符包括:按位与(&)、按位或(|)、按位异或()、按位非()、左移(),下面演示赋值运算符的使用方法,代码如下所示。,2.6.6 比较运算符,比较运算符可以对两个值进行比较,不管两个值是否为同一类型。比较运算符包括:等于(=)、全等(=)、不等(!=)、不等()、非全等(!=)、小与()、小于等于(
39、=),下面演示比较运算符的使用方法,,2.6.7 错误控制运算符,在可以产生值的表达式前使用错误控制运算符,可以忽略因表达式运算错误而产生的错误信息。错误控制运算符是“”,下面演示错误控制运算符的使用方法,代码如下所示。 ,2.6.8 执行运算符,使用执行运算符“”,PHP将把运算符内的字符作为外壳命令来执行,其作用与shell_exec()函数相同。下面演示执行运算符的使用方法,代码如下所示。 $output“; ? 注意:在安全模式激活或者关闭了shell_exec()的情况下,执行运算符是无效的。,2.6.9 递增递减运算符,递增/递减运算符主要是对整型进行操作,同时对字符也有效。其操作
40、符包括:前加、后加、前减、后减。下面递增/递减运算符的使用方法, 递增/递减运算符对布尔值没有影响,递减NULL值时也没有效果,但是在递增NULL值是,结果为是1。,2.6.10 逻辑运算符,逻辑运算符可以操作布尔型。其运算符包括:逻辑与(and)、逻辑与( ?,2.6.11 字符串运算符,字符串运算符主要用于连接两个字符串。其运算符包括:“.”和“.=”,下面演示字符串运算符的使用方法,代码如下所示。 ,2.6.12 数组运算符,数组运算符可以对两个数组进行比较。数组运算符包括:联合(+)、相等(=)、全等(=)、不等于(!=)、不等于()、不全等于(!=)。下面演示数组运算符的使用方法,代
41、码如下所示。 $n; /比较两个数组是否不全等于 $m != $n; ?,2.6.13 类型运算符,类型运算符可以针对对象进行检测,以测定其实现的接口是否来自于指定的类。下面演示类型运算符的使用方法,代码如下所示。,2.7 程序流程控制,程序流程控制在编程语言中占有重要的地位,大部分的程序段都要依靠其来完成。PHP的程序流程主要包括判断、循环、开关控制等,而这些控制语句之间大多都可以进行嵌套使用。,2.7.1 if else elseif分支控制,if是重要的分支控制语句,当程序运行时,为if提供一个表达式,如果表达式是TRUE值,将执行if后面的语句,如果为FALSE值,则忽略if后面的代码
42、继续执行其他代码段。 elseif是if语句的延伸,其自身也有条件判断的功能,在if运行条件为FALSE值时,elseif会判断自身的运行条件,如果为TURE值时,执行elseif内的代码段,如果运行条件为FALSE值,刚跳过该代码段。 else也是if语句的延伸,其用在if和elseif语句后,用于这两个语句的运行条件为FALSE值时,运行其内的代码。 if、elseif、else给合使用,可以根据表达式的值来指定要运行的代码段,使得程序在运行时,流程变得更加清晰。,2.7.2 while do-while循环控制,while语句主要负责程序里的循环控制,当需要完成大量的重复性工作时,就可以
43、通过条件控制while来完成。while语句在运行时,如果给定的表达式是TRUE值,就运行循环体内的语句,同时改变表达式的值,再次回到while语句开始重新检查表达式的值,如果表达式是TRUE值再次循环,直到表达式值为FALSE为止。如果在循环中表达式的值为FALSE,就停止循环,继续执行其他代码。需要注意的是,如果一开始给定的表达式值为FALSE,while语句是不会运行的。,2.7.3 for foreach循环控制,for语句也是用于循环控制,但是与while相比就比较复杂了,其语法如下所示。 for(条件1;条件2;条件3) /要循环的语句 for循环是比较复杂的语句,在使用时要特别注
44、意,如果循环条件没有设置,语句是不会运行的。 语法中的条件1在循环开始前就要初始化。 语法中的条件2使用条件1的值与给出值做比较,如果为TRUE值开始循环,如果是FALSE值则结束循环。 语法中的条件3是在每次循环后运行。 如果语法中的3个条件都为空,则会形成无限循环。,2.7.4 switch case开关控制,switch语句看似很复杂,但是其本身就是多个if语句的组合。switch语句运行时要求一个变量,在switch语句内,会对这个变量进行比较,如果满足语句内的条件就执行对应的代码,否则向下执行,直到语句结束。 使用switch相比使用if语句简单的多,也更容易理解。switch接收的
45、变量包括整型和字符串。,2.7.5 break控制符,在2.7.4小节中,使用break语句来结束switch语句的运行。这是典型的break语句的使用方法,同时break语句还可以作用于for、foreach、while、do-while语句,在循环语句嵌套使用时, break语句也有其针对的用法。,2.7.6 continue控制符,在循环控制语句中使用continue语句,将跳过本次循环的剩余代码,转到循环控制的开始,如果循环语句的表达式为TRUE值,继续进行循环。continue的延伸用法和break语句一样,都是在语句后面加上数字,表示要跳出的循环数,在循环语句嵌套使用时, cont
46、inue语句也有其针对的用法。,2.7.7 return控制符,return控制符主要有两种使用方法: (1)在函数中使用return:在函数中使用return控制符,将结束函数的执行并返回指定的值, (2)在脚本中使用return:直接在脚本中,包括在循环体内使用return,将结束当前脚本的运行,,2.7.8 流程控制的替代语法,在流程控制中,有可能遇到需要显示大段HTML代码的情况,这时可以把流程控制的语句使用替代语法表示,使程序更加易读。可以使用替代语法的流程控制语句有:if、while、for、foreach、switch。下面演示使用替代语法进行流程控制,2.7.9 包含运行文件操
47、作,包含文件操作包括:include()、require()、include_once()、require_once()4个语句,语句指定的文件,将被包含到当前文件并运行。下面演示这4个语句的使用方法,代码如下所示。 ,2.8 引用,新建一个变量名,并指向一个已经存在的变量就称为引用。引用实际上就是为变量增加了一个别名,使用引用的变量,与使用变量本身是一样的,如果改变了引用变量的值,那么变量本身的值,也会随着产生变化。本节只是介绍了引用的基本用法,在本书的其他章节,会有其他关于引用高级应用的例子。,2.8.1 建立引用,要完成引用操作,就要使用引用操作符“ /输出12 ?,2.8.2 引用的应
48、用,引用不仅可以应用在变量上,也可以应用在数组上。下面演示引用数组使用方法,代码如下所示。,2.8.3 取消引用,取消引用需要使用变量删除函数unset(),下面演示取消引用的方法,代码如下所示。 ,2.9 常见问题,语法是学习语言的基础,只有打好扎实的基础,才能在程序编写时减少程序的语法错误,提高程序的可读性、灵活性。在本章的几个知识点里,针对容易出错的地方特别说明一下。,2.9.1 嵌套问题,在本章中一开始接触到的HTML与PHP代码、PHP与JavaScript,到程序控制语句中的循环语句,都存在着嵌套问题。当嵌套代码在一行或几行之内,都是可控的。但是有些代码,比如要显示一个软件界面,就
49、需要很多代码来完成,这时的代码量可能是一屏或几屏,这就需要程序员在编写程序时,在嵌套方面多加注意。有两个小的技巧,可以减少这方面的错误。 (1)完整的花括号:对于很多程序员来讲,输入花括号可能是比较费力的事,有时会因为先输入了左花括号,而在花括号内嵌入了大量代码后,没有使用右花括号关闭语句,这时候很容易产生错误。所以在输入花括号时,可以一次性输入完成,再在中间嵌入其他代码。输入完整的花括号,也孕挛偶钦叱绦蛴幸欢陌镏Eclipse在这方面提供了自动功能,会根据输入的内容自动添加另一半符号。 (2)尽量使用函数和包含文件:把大段的HTML代码做成包含文件或函数,在运行条件允许时,只要包含进文件或调用函数,就可以实现功能。使得嵌套内的代码变得简洁,易懂。,2.9.2 数组问题,因为数组相对于变量来说,较为复杂,所以在使用时经常会遇到一些问题,主要表现在以下几个方面: (1)键名:为了简单,在编写程序时定义的数组,往往没有键名,当经过多步对数组的操作后,要使用其中一个数组成员就变得很困难。这要求在需要单读读取数组成员的时候,数组定义时
链接地址:https://www.31doc.com/p-2600565.html