资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,动态网站开发与全程实例,ISBN书号:97-7-302-16213-1,作者:聂庆鹏 毛书朋 王志乐,版权所有 本书编写组,PHP+MYSQL,出版:清华大学出版社,本书的技术支持、意见反馈及勘误信息请访问,作者电子信箱:,11/2/2025,1,第4章 PHP5的基本语法,4.1 PHP语法概述,4.2 PHP的常量和变量,4.3 PHP的运算符和表达式,4.4 PHP的流程控制,4.5 PHP的系统函数与自定义函数,4.6 PHP5的类与对象,11/2/2025,2,4.1 PHP语法概述,4.1.1 一个简单的PHP程序,hello,world!几乎已经变成了所有程序语言的第一个范例。因此,在这儿也不例外,我们就先用 PHP 来写一个输出 hello,world!的简单的PHP程序。,11/2/2025,3,4.1 PHP语法概述,4.1.1 一个简单的PHP程序,1:,2:,3:,4:First program,5:,6:,7:,10:,11:,11/2/2025,4,4.1 PHP语法概述,4.1.1 一个简单的PHP程序,我们再来通过浏览器窗口“查看=源文件”操作来查看其源文件如下:,First program for PHP,hello,world!,11/2/2025,5,4.1 PHP语法概述,4.1.2 PHP嵌入HTML的方式,、利用分界符“”,这是PHP最为普通的嵌入方式强烈建议使用此方式,这种写法可以为你的程序在跨平台使用时减少不必要的麻烦!,、利用分界符“”,这种方式是简写方式,必需在php.ini文件中将shor_open_tag设置为On(PHP5中默认设置为On),否则编译器将不予解析。,3、利用分界符“”和“”,这是类似于JavaScript和VBScript风格的嵌入方式,4、利用分界符“”,这是一种具有ASP风格的嵌入方式,必须在“php.ini”文件中设置asp_tags为On,否则编译器将不予解析。,强烈建议少用这种方法,因当 PHP 与 ASP 源代码混在一起时就麻烦喽!,11/2/2025,6,4.1 PHP语法概述,4.1.2 PHP嵌入HTML的方式,友情提示:其实,在编写 PHP 程序最好的方法,是先处理好纯 HTML 格式的文件之后,再将需要变量或其它处理的地方改成 PHP 程序。这种方法,可以让您在开发上达到事半功倍的效果。,11/2/2025,7,4.1 PHP语法概述,4.1.3 PHP程序的注释方法,在 PHP 的程序中,加入注释的方法很灵活。可以使用 C 语言、C+语言或者是 UNIX 的 Shell 语言的注释方式,而且也可以混合使用。具体方法如下:,、“/”:这是从语法中借鉴来的,该符号只能注释一行。,、“/*”和“*/”:这是语言的注释符,符号之间的都将被注释掉。,、“#”:这是UNIX 的 Shell 语言风格的注释符,也只能注释一行。,11/2/2025,8,4.1 PHP语法概述,4.1.4 PHP的文件引用,引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。,require 的使用方法如 require(MyRequireFile.php);。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。,include 使用方法如 include(MyIncludeFile.php);。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。,11/2/2025,9,4.1 PHP语法概述,4.1.4 PHP的文件引用,下面我们先建立一个名为“4-4.php”的文件,输入如下代码:,1:,2:,3:,4:PHP文件的引用,5:,6:,7:,12:,13:,11/2/2025,10,4.1 PHP语法概述,4.1.4 PHP的文件引用,然后我们再建立一个名为“include.msp”的文件,其代码如下:,1:,2:,11/2/2025,11,4.1 PHP语法概述,4.1.4 PHP的文件引用,友情提示:“include.msp”为被引用的文件名,只要保证该文件的类型为文本类型,它的名字可以任意命名,包含其后缀。这样你是不是可以作出很有个性的文件呢?,11/2/2025,12,4.2 PHP的常量和变量,4.2.1 PHP的常量类型,PHP的常量包含两种:一种是系统预定义常量,另一种是自定义常量。,PHP中预定了很多系统常量,这些系统常量可以很好地帮助我们了解系统当前的情况,而且这些常量可以随时调用。具体列举如下:,11/2/2025,13,4.2 PHP的常量和变量,4.2.1 PHP的常量类型,1、_FILE_,这个默认常量是 PHP 程序文件名。若引用文件(include 或 require)则在引用文件内的该常量为引用文件名,而不是引用它的文件名。,2、_LINE_,这个默认常量是 PHP 程序行数。若引用文件(include 或 require)则在引用文件内的该常量为引用文件的行,而不是引用它的文件行。,3、PHP_VERSION,这个内建常量是 PHP 程序的版本,如 3.0.8-dev。,4、PHP_OS,这个内建常量指执行 PHP 解析器的操作系统名称,如 Linux。,5、TRUE,这个常量就是真值(true)。,11/2/2025,14,4.2 PHP的常量和变量,4.2.1 PHP的常量类型,6、FALSE,这个常量就是伪值(false)。,7、E_ERROR,这个常量指到最近的错误处。,8、E_WARNING,这个常量指到最近的警告处。,9、E_PARSE,本常式为解析语法有潜在问题处。,10、E_NOTICE,这个常式为发生不寻常但不一定是错误处。例如存取一个不存在的变量。,这些 E_ 开头形式的常量,可以参考 error_reporting()函数,有更多的相关说明。,11/2/2025,15,4.2 PHP的常量和变量,4.2.1 PHP的常量类型,1:,2:,3:,4:PHP预定义常量,5:,6:,7:,18:,18:,11/2/2025,16,4.2 PHP的常量和变量,4.2.1 PHP的常量类型,当然我们在实际编写程序时,仅使用以上的系统预定义常量是不够用。define()的功能可以让我们自行定义所需要的常量。用法详见下例:,1:,2:,3:,4:PHP定义常量,5:,6:,7:,11:,12:,11/2/2025,17,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,PHP的变量属于松散的数据类型,具体使用时应注意以下几点:,变量名要以“$”开头,且区分大小写;,变量不必要预先定义或声明;,变量在使用时编译器可动态进行类型指定和转换;,变量如果未赋值而直接使用,变量值将被视为空;,友情提示:最好使用相同的变量命名风格,以免在团队合作或自己查找错误的时候因变量大小的问题,浪费许多无谓的时间,那就得不偿失了。变量之间若要转换类型,当然是很自由的,但浮点数转成整数就有点牵强了,不过可以将浮点数转成字符串,也是很好处理的。,11/2/2025,19,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,1、字符串(string),无论是单一字符或数千字的字符串都是使用这个变量类型。值得注意的是要指定字符串给字符串变量时,要在头尾都加上双引号或单引号(例如:“这是字符串”或这是字符串)。而且在PHP中也提供一些转移字符,用以辅助那些已经被程序语法结构占用了的特殊字符,其列表如下:,11/2/2025,20,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,1、字符串(string),友情提示:以上的转义字符PHP中和是不一样的,而且也可能无效,在使用时一定要测试通过了之后再用哦!再比如若“n”换行无效,你可以使用“”来换行。,转移字符,含 义,双引号,反斜线,n,换行,r,回车,t,制表符(TAB),$,美元符号($),x两位数字,表示十六进位字符,11/2/2025,21,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,2、整型(integer):,在 32 位的操作系统中,它的有效范围是-2,147,483,648 到+2,147,483,647。要使用 8 进位整数可以在面加 0(零),要使用 16 进位整数可以在面加 0 x。如:,$int1=1234 /十进制正整数,$int1=-1234 /负整数,$int1=01234 /八进制整数,$int1=0 x1234 /十六进制整数,11/2/2025,22,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,3、双精度型(浮点型)(double(floating point number)),在 32 位的操作系统中,它的有效范围是 1.7E-308 到 1.7E+308。如:,$float2=6.6666e2 /表示6.6666乘以10的2次方,为指数形式的浮点数,应当注意的是,浮点型变量显示所用的十进制数的个数由php.ini文件中的precision定义,预定值为12,即浮点数的最长为14个数字。,11/2/2025,23,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,4、布尔型(boolean),布尔型也就是逻辑型,其值非真即假,只要用于条件表达式和逻辑表达式中,用以控制程序流程。这种类型是从PHP4种才开始存在的。通常 1 即为 true,0 为 false。,要明示地将一个值转换成 boolean,用(bool)或者(boolean)来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。,11/2/2025,24,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,例:文件4-7.php:PHP变量的使用=字符串、整型、浮点型、布尔型,11/2/2025,25,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,5、数组(array),数组变量可以是一维、二维或者更多维数组,其中的元素也很自由,可以是字符串、整型、浮点型、布尔型,甚至是数组或则对象。PHP还同时支持以数字为下标的索引数组(scalar array)和以字符串为下标的关联数组(associative array),这二者虽没有任何区别,但也算得上是PHP比别的语言特别的地方之一吧!在PHP中可以使用list()函数或者array()函数来创建数组,也可以直接进行赋值。,11/2/2025,26,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,5、数组(array),用array()函数创建数组的方法如下例:,文件4-8.php:用array()函数创建PHP数组,文件4-9.php:逐一给数组元素赋值,文件4-10.php:数组元素简洁赋值-,11/2/2025,27,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,5、数组(array),PHP中多维数组与一维数组的区别在于多维数组有两个或多个下标,他们的用法基本上是一样的。下面的例子就是采用逐一给二维数组元素赋值的方法来创建和使用二维数组的。,11/2/2025,28,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,5、数组(array),文件4-11.php:多维数组的逐一赋值法,文件4-12.php:用嵌套的array()函数创建PHP数组,11/2/2025,29,4.2 PHP的常量和变量,4.2.2 PHP的变量类型,6、对象(object),object 为对象类型变量,目前在 PHP 中的默认类并不是太多,不过相信有了大家的努力一定会丰富起来的。我们将在4.6节中单独讲解对象的使用。,11/2/2025,30,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,PHP的运算符大部分是从C语言中借用而来的,共分以下几类:,算术运算符:+、*、/、%、+、-,字符串运算符:.,赋值运算符:=、+=、-=、*=、/=、%=、.=,位运算符:&、|、,逻辑运算符:&(And)、|(Or)、xor(Xor)、!(Not),比较运算符:、=、=、=、!=,其他运算符:$、&、-、=、?:,11/2/2025,31,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,1、算术运算符号,就是用来处理四则运算的符号,这是最简单,也最常用的符号,尤其是数字的处理,几乎都会使用到算术运算符号.,例:文件4-13.php:算术运算符的应用,符号,意义,+,加法运算,-,减法运算,*,乘法运算,/,除法运算,%,取余数,+,累加,-,累减,11/2/2025,32,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,友情提示:PHP中的除法运算得到的结果是整数就是整数,是实数就是实数。PHP中的求模运算会对两操作数自动取整。另外,在PHP中字符也可以进行自增运算,这样是不是就可做成选择题的a、b、c、d选项序号呢?,11/2/2025,33,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,2、字符串运算符,字符串运算符号只有一个,就是英文的句号“.”。它可以将字符串连接起来,变成合并的新字符串,也可以将字符串与数字连接,这时类型会自动转换,,具体用法见实例:文件4-14.php:字符串运算符的应用,11/2/2025,34,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,3、赋值运算符,符号,意义,=,将右边的值赋给左边的变量,+=,将左边的值加上右边的值赋给左边的变量,-=,将左边的值减去右边的值赋给左边的变量,*=,将左边的值乘以右边的值赋给左边的变量,/=,将左边的值除以右边值赋给左边的变量,%=,将左边的值对右边取余数赋给左边的变量,.=,将左边的字符串连接到右边,11/2/2025,35,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,4、位运算符,PHP中的位运算符有6个,常用于二进制的运算场合,其具体含义如下:,符号,意义,&,按位与,|,按位或,按位异或,按位右移,按位取反,11/2/2025,36,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,4、位运算符,其中“”是单目运算符,其他的都是双目运算符。与、或、异或和取反的运算规则如下:,0&0=00&1=01&0=01&1=1(与:有假就假,都真才真),0|0=00|1=11|0=11|1=1(或:有真就真,都假才假),00=001=110=111=0(异或:相等为假,不等为真),0=11=0,友情提示:在对十进制进行位运算时要先转为二进制,然后按上述规则进行计算。,11/2/2025,37,4.3 PHP的运算符和表达式,5、逻辑运算符,逻辑运算通常用来测试真假值。逻辑运算经常用在条件判断和循环处理中,用来判断条件是否满足和是否该离开循环或继续执行循环。逻辑运算符的具体含义如下:,符号,意义,&(and),逻辑与,|(or),逻辑或,xor,逻辑异或,!,逻辑非,11/2/2025,38,4.3 PHP的运算符和表达式,5、逻辑运算符,$x,$y,$x&$y,$x|$y,$x xor$y,!$x,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,11/2/2025,39,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,6、比较运算符,比较运算符和逻辑运算的用法差不多,通过比较大小来测试真假值,经常用在条件判断和循环处理中,用来判断条件是否满足和是否该离开循环或继续执行循环。比较运算符的具体含义如下:,友情提示:“=”为PHP 4 中新增的比较运算符,用于类型判等。例如:”3”=3将判为假。其他的比较运算符和C语言的基本一致,这儿就不再多说了。,符号,意义,大于,=,大于或等于,=,等于(不包括类型),=,完全相等(包括类型),!=,不等于,11/2/2025,40,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,7、其他运算符:,其中比较特殊的是三目运算符“?:”,例如:(expr1)?(expr2):(expr3);表示如果expr1的运算结果为true,则执行expr2;否则执行expr3。实际上它有点类以 if.else 循环,但可以让程序较精简有效率。,此外,还有用于新对象的定义符new、用于数组下标引用的方括号“”、表示结合性的大括号“”等。,友情提示:PHP中的运算符是十分丰富的,而且使用起来也很灵活,希望大家多多上机实践练习哦!,符号,意义,$,用于定义变量,&,变量的地址(加在变量前引用变量),屏蔽错误信息(加在函数前),-,引用对象的方法或者属性,=,用于给数组元素赋值,?:,三目运算符,11/2/2025,41,4.3 PHP的运算符和表达式,4.3.1 PHP的运算符,8、运算符优先级与结合性,11/2/2025,42,4.3 PHP的运算符和表达式,4.3.2 PHP的表达式,表达式,就是由操作数、操作符以及括号等所组成的合法序列。简单地说,PHP中的常量或变量通过运算符连接后就形成了表达式,例如“$a=1”为一个表达式。表达式也有值,如上面的这个表达式的值就是1。,根据表达式中运算符类型的不同我们又可以把表达式分成:算术表达式、字符串连接表达式、赋值表达式、位运算表达式、逻辑表达式、比较表达式、其他表达式等。,最常见的表达式是比较表达式和逻辑表达式,这种表达式的值只能是真或假,在下面一节的流程控制中,会大量使用这两种表达式。,友情提示:“$a=1”为表达式,“$a=1;”则为一条语句。一定要分清楚哦!,11/2/2025,44,4.4 PHP的流程控制,在任何一种编程语言中,所有的程序都由3种基本的结构组成,即:顺序结构、分支结构、循环结构。,程序是由若干的语句组成的,如果在程序中的语句的执行顺序是从上到下依次逐句执行的,那么这个程序的结构就是顺序结构,在这种结构中没有分支和反复,这也是最简单、最常见的流程结构,我们这里就不再多讨论。,11/2/2025,45,4.4 PHP的流程控制,PHP中提供了4条流程控制语句来实现分支结构和循环结构,即:,ifelse条件语句,switch分支选择语句,dowhile循环语句,for循环语句,此外PHP还提供了break语句和continue语句,用以跳出分支结构或循环结构,下面我们就将这些语句逐一进行详细的介绍。,11/2/2025,46,4.4 PHP的流程控制,4.4.1 ifelse语句,ifelse语句共有三种基本结构,此外每种基本结构还可以嵌套另外两种结构,而且嵌套的层次也可以不止是一层。,11/2/2025,47,4.4 PHP的流程控制,4.4.1 ifelse语句,1、只有if的语句,这种结构可以当作单纯的判断,可解释成 若某条件成立则去做什么事情。语法如下:,if(expr),statement,11/2/2025,48,4.4 PHP的流程控制,4.4.1 ifelse语句,1、只有if的语句,这种结构可以当作单纯的判断,可解释成 若某条件成立则去做什么事情。语法如下:,if(expr),statement,其中的 expr 为判断的条件表达式,通常都是有比较表达式或逻辑表达式来充当,而 statement 为符合条件的执行语句部分程序,若程序只有一行,可以省略大括号。如果expr 为真,则执行statement 语句或语句体。,11/2/2025,49,4.4 PHP的流程控制,4.4.1 ifelse语句,2、ifelse语句,这种结构可解释成 若某条件成立则去做什么事情,否则去做什么事情。其语法如下,if(expr),statement1,else,statement2,11/2/2025,50,4.4 PHP的流程控制,4.4.1 ifelse语句,3、else if语句,前面的两种分支结构只能实现二路分支,用包含else if的语句则可以实现多路分支,其语法如下:,if(expr1),statement1,else if(expr2),statement2,else if,else,statementn,11/2/2025,51,4.4 PHP的流程控制,4.4.1 ifelse语句,例:文件4-15.php:ifelse的应用,在上述3种基本结构中,如果在statement语句体中还有ifelse语句,就构成嵌套的ifelse语句。,友情提示:在使用嵌套的ifelse语句时,一定要注意else和if的匹配、和的匹配。只有else语句没有if的语句是不存在的。,11/2/2025,52,4.4 PHP的流程控制,4.4.2 switch语句,嵌套的ifelse语句可以处理多分支流程情况,但使用起来比较繁琐而且分析也不太清晰,为此PHP中又引进了switch语句。其语法如下,switch(expr),case expr1:,statement1;,break;,case expr2:,statement2;,break;,:,:,default:,statementN;,break;,其中的 expr 条件,通常为变量名称。而 case 后的 exprN,通常表示变量值。冒号后则为符合该条件要执行的部分。一定要注意break为跳离循环,千万不能省略不写。,11/2/2025,53,4.4 PHP的流程控制,4.4.2 switch语句,例:文件4-16.php:switch的应用,友情提示:在设计switch语句时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天出现的机率相同,所以不用注意条件的顺序。,11/2/2025,54,4.4 PHP的流程控制,4.4.3 dowhile语句,在PHP中,dowhile循环语句有两种结构,一种只有while部分,另一种是dowhile两部分都有。,1、只有while部分的语句,其语法如下,while(expr),statement,do,statement,while(expr);,2、dowhile两部分都有的语句,其语法如下:,11/2/2025,55,4.4 PHP的流程控制,4.4.3 dowhile语句,其中的 expr 为判断的条件,通常都是用逻辑表达式或比较表达式充当判断的条件。而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号。,二者的区别在于:前者是先判断再执行,后者是先执行再判断。对于expr开始为真的情况,而且是没有区别的。如果expr开始为假,则前者不执行任何语句就跳出循环,而后者仍要执行一次循环才能跳出循环。,11/2/2025,56,4.4 PHP的流程控制,4.4.3 dowhile语句,例:文件4-17.php:dowhile的应用,11/2/2025,57,4.4 PHP的流程控制,4.4.4 for语句,For语句仅有单纯的一种,没有其他变化,但同时他也是最复杂,功能最强大得循环,任何while循环和dowhile循环都可以用for循环代替,其语法如下:,for(expr1;expr2;expr3),statement,其中expr1为条件的初始值,expr2为判断的条件,通常都是用比较表达式或逻辑表达式充当判断的条件,expr3为执行statement后要执行的部份,即循环步长,用来改变条件,供下次的循环判断,如加1、减1等等。而 statement 为符合条件后执行的语句或语句体,若statement只有一条语句组成,则可以省略大括号。,11/2/2025,58,4.4 PHP的流程控制,4.4.4 for语句,例4-17程序的主体部分可以用for循环改写如下:,?php,for($i=1;$i,?php,$i=1;,for(;$i,10)break;/循环标志结束,跳出循环,echo$i.以后不敢了;,?,?php,for($i=1;$i,11/2/2025,59,4.4 PHP的流程控制,4.4.5 break和continue语句,我们在switch和for语句的举例中都用到了break语句,他的作用就是跳出整个的switch或for语句体,执行其外的下面的语句。而continue经常用在for或dowhile循环语句中,表示跳出本次循环,继续进入下一次的循环。,11/2/2025,60,4.4 PHP的流程控制,4.4.5 break和continue语句,例:文件4-18.php:break/continue的应用,11/2/2025,61,4.5 PHP的系统函数与自定义函数,在程序的编写过程中往往会有一些要反复用到的功能某块,如果每次都要重复编写这些代码,不仅浪费时间,而且还会使程序变得冗长、可读性差,维护起来也很不方便,此时我们就想到了函数。PHP 5允许程序设计者将常用的流程或者变量等元件,组织成一个固定的格式。也就是说用户可以自行组合函数或者是类。这样在编写好函数或则类之后,我们在使用时就不必关心其中的细节,拿过来就可以用;要做功能修改时,只需修改函数中的内容,所有对此函数的调用都会发生相应的变化,不必一个一个地去改动。此外,使用函数还能减少对系统资源的耗用,因为每一次函数调用结束后,都会释放掉它所占用的资源。PHP 5 中的函数有可以分为系统函数和自定义函数,系统函数在后面的章节和附录中都将涉及到,本节主要讲解自定义函数。,11/2/2025,62,4.5 PHP的系统函数与自定义函数,4.4.1 函数的定义和调用,PHP 5中的函数C语言一样。函数定义的语法为:,function 函数名(形式参数列表),函数体;,return 返回值;,11/2/2025,63,4.5 PHP的系统函数与自定义函数,4.4.1 函数的定义和调用,PHP 5中的函数有无返回值都允许。而且,在函数的名称上,PHP 对于大小写的管制比较松散。可以在定义函数时写成大写的名字,而在使用时使用小写的名字。总之,对函数而言,不用管大小写,只要注意名称没有重复就可以了。不过,PHP 5 对用户自定义函数名也是有一些要求的,具体如下:,不能与PHP的内部函数同名,不能与PHP的关键字重名,不能以数字或下划线开头,不能包含点号“.”和中文字符,函数体是实现函数功能的语句体,与for循环等不一样,函数体中即使只有一条语句,外面的大括号也不能省略。,11/2/2025,64,4.5 PHP的系统函数与自定义函数,4.4.1 函数的定义和调用,函数调用的语法为:,函数名(实际参数列表);,实际参数列表要与形式参数列表相对应(有默认参数时实际还要与默认参数对应)。如果实际参数比形式参数多,多于的参数会被自动舍弃;如果实际参数比形式参数少,实际参数会被一一填入形式参数中,不足部分以空参数代替。实际参数和形式参数之间的传递机制会在下一小节中讲述。,如果函数有返回值,还可以利用函数调用为变量赋值,其语法为:,变量名=函数名(实际参数列表);,11/2/2025,65,4.5 PHP的系统函数与自定义函数,4.4.1 函数的定义和调用,4-19.php:函数的定义和调用=求阶乘,11/2/2025,66,4.5 PHP的系统函数与自定义函数,4.4.2 函数的参数传递,在使用函数时,要填入与函数形式参数个数相同的实际参数(有默认参数的除外),在程序运行过程中,实际参数就会传递给相应的形式参数,然后在函数中实现对数据的处理和返回。,在由实际参数向形式参数传递的过程中,共有值传递、引用传递、默认参数3种机制。,11/2/2025,67,4.5 PHP的系统函数与自定义函数,4.4.2 函数的参数传递,1、值传递,作为值传递,就是将实际参数的值拷贝到形式参数中。然后由形式参数参与函数内部的计算,函数调用结束后,实际参数的值不会发生改变。,用这种方式调用的函数一般都有返回值或输出值,否则函数调用实际上什么也没有做。例4-19就是使用的这种传递方式。初学者一般常使用这种传递方式。,11/2/2025,68,php:break/continue的应用,switch(expr),1 PHP的常量类型,动态网站开发与全程实例,1、局部变量和全局变量,5 变量在函数中的使用,2 PHP的常量和变量,5 PHP的系统函数与自定义函数,10:?,使用引用变量的方法是赋值时在右边变量前加“&”符号,,3 用函数的同名变量实现可变函数,声明为 public 的属性可以在类外部写入和读取,声明为 private 的属性只在对象或类上下文中可见。,1 PHP的常量类型,if(expr),3 用构造函数实现类的初始化,4.5 PHP的系统函数与自定义函数,4.4.2 函数的参数传递,2、引用传递,如果要实现形式参数改变时实际参数也发生相应的改变,就要使用引用传递的方式。参数的引用传递也有两种方法:,在函数定义的时候,在形式参数前面加上“&”符号,例如:,function fun(&$var1),在函数调用的时候,在实际参数前面加上“&”符号,例如:,function fun($var1),fun(&$var2),如果形式参数$var1的值在函数中发生改变,实际参数$var2的值也会发生相应的改变。,11/2/2025,69,4.5 PHP的系统函数与自定义函数,4.4.2 函数的参数传递,3、默认参数,PHP 5还支持有默认值的参数,即在函数定义时可以为一个或多个形式参数指定默认值。,11/2/2025,70,4.5 PHP的系统函数与自定义函数,4.4.2 函数的参数传递,例:文件4-20.php:函数参数的传递,11/2/2025,71,4.5 PHP的系统函数与自定义函数,4.4.3 用函数的同名变量实现可变函数,PHP 5 中还提供了可变函数的机制,可以方便地利用变量实现对函数的调用。使用的基本格式为:,Function fun(),$var=”fun”;,$var();,其中调用$var()就相当于调用函数fun(),$var()为可变函数。可变函数与普通函数调用时的最大区别就在于可变函数前面有”$”,有此符号,系统就会认为是可变函数。,友情提示:如果写成$var=”fun()”,则“$var”只是一个普通的字符串而已,再调用语句“$var;”不会实现fun()函数的功能。,11/2/2025,72,4.5 PHP的系统函数与自定义函数,4.4.3 用函数的同名变量实现可变函数,例;文件4-21.php:函数的同名变量实现可变函数,11/2/2025,73,4.5 PHP的系统函数与自定义函数,4.4.4 用函数调用实现递归与嵌套,PHP 5中的函数支持递归赫嵌套。所谓递归就是一个函数在自己的函数体内调用自身。所谓嵌套,就是一个函数在其函数体内调用其他函数。,例:文件4-22.php:函数递归实现阶乘运算,例:文件4-23.php:使用递归求解斐波那契数列,例:文件4-24.php:函数嵌套求闰年,11/2/2025,74,4.5 PHP的系统函数与自定义函数,4.4.5 变量在函数中的使用,PHP 5 的变量用范围的不同可以分为若干种类,比如局部变量、全局变量、静态变量、动态变量、引用变量、预定以变量、外部变量等,下面我们就前5种变量的进行如下讲解。,11/2/2025,75,4.5 PHP的系统函数与自定义函数,4.4.5 变量在函数中的使用,1、局部变量和全局变量,PHP中的变量是有作用范围的,,一般情况下,,变量的作用域是包含变量的PHP程序块,也就是“”之间的代码或者“”、“”之间的代码。如果其中还有include()或require()函数包含的文件,变量的作用域也可以扩展到这些文件里。,在主程序中定义的变量只在主程序中有效,在函数中定义的变量只在函数中有效,在函数之外就无效了。,11/2/2025,76,4.5 PHP的系统函数与自定义函数,4.4.5 变量在函数中的使用,1、局部变量和全局变量,如果要在函数中引用主程序中的变量的值,使用PHP定义的$GLOBALS数组,$GLOBALS数组是一个以变量名为下标的数组,我们可以直接调用。,还有一种实现跨域调用功能的方法就是使用全局变量,值得注意的是PHP中的全局变量并不是对整个程序都可见,我们在主程序中也可以访问函数中的全局变量,但是我们在函数中并不能访问主程序的全局变量。其定义的语法为:,global$变量名;,例:文件4-25.php:局部变量和全局变量,11/2/2025,77,4.5 PHP的系统函数与自定义函数,4.4.5 变量在函数中的使用,1、局部变量和全局变量,例:文件4-25.php:局部变量和全局变量,友情提示:在PHP函数中使用$GLOBALS数组,是不是和我们在4.4.2节中讲到的参数传递有异曲同工之效呢?为了防止程序中变量的混乱,建议尽量不要使用全局变量,至少应尽可能少地使用全局变量。,11/2/2025,78,4.5 PHP的系统函数与自定义函数,4.4.5 变量在函数中的使用,2、静态变量和动态变量,静态变量只能用于函数范围内,与普通局部变量不同之处在于:当该函数运行结束时,静态变量不会丢失自己的值。静态变量的定义方法为在变量名前冠以“static”关键字。,PHP中的动态变量允许一个变量的值作为另一个变量的变量名,前提条件是这个值要符合变量命名的规则。,11/2/2025,79,4.5 PHP的系统函数与自定义函数,4.4.5 变量在函数中的使用,2、静态变量和动态变量,文件4-26.php:静态变量与动态变量,通过上例我们不难看出静态变量与普通变量的区别,在函数fun2()中静态变量$int2只被初始化了一次,在该函数退出时$int2的值不会丢失,所以反复调用函数fun2()时,$int2的值会累加。,友情提示:静态变量虽然在函数结束时值不会丢失,但其作用域只在本函数中,在函数之外仍然无效。动态变量的实现思想是否与4.4.3节中用函数的同名变量实现可变函数的思想相吻合呢?,11/2/2025,80,4.5 PHP的系统函数与自定义函数,4.4.5 变量在函数中的使用,3、引用变量,PHP 5中支持引用变量,这是从C+语言中借用而来的。对一个变量进行引用产生新变量后,新变量可以看作是原变量的一个别名,改变其中任何一个的值,两个值都会发生改变。使用引用变量的方法是赋值时在右边变量前加“&”符号,,具体实例:文件4-27.php:引用变量,11/2/2025,81,4.5 PHP的系统函数与自定义函数,4.4.5 变量在函数中的使用,3、引用变量,引用变量在进行赋值时,系统只是简单将新变量执行原变量的地址,其中没有变量复制的操作,所以速度非常快。如果参数是大数组或对象,使用引用变量进行参数传递能节省内存并加快程序运行速度。不过其副作用就是引用值改变,原变量也会发生改变,因此是否能使用引用变量进行参数传递要视具体情况而定。,11/2/2025,82,4.6 PHP5的类与对象,要想成为一名合格的PHP程序员,您必须掌握类和对象。您肯定知道变量和函数,但类和对象可能就是另一回事。如果您不定义、使用类和对象,您就无法创建完美的系统。即使您决定在自己的代码中不使用面向对象的编程,您仍可能需要了解面向对象的编程。比如,如果您要使用第三方库,那么您就必须学会实例化对象和调用方法。下面我们就来逐步学习类和对象的相关知识。,11/2/2025,83,4.6 PHP5的类与对象,4.6.1 类和对象的概念,简单地说,类是一个由变量和方法组成的独立程序块或功能某块。这些由变量和方法结合通常能实现单个功能或一组功能。类可以直接用作组织数据和功能的简单方法
展开阅读全文