第六章函数初识函数函数的应用字符串相关函数日期和时间函数§6.1初识函数函数函数就是有一定功能的一些语句组织在一起的一种形式。定义函数的目的是将程序按功能分块,方便程序的使用、管理和调试。函数有两种:一种是系统内部提供的函数;一种是自己定义的,用来实现自己的需求。函数的声明使用关键字function来定义,其语法格式如下所示:function函数名([参数1,参数2,……]){函数体}函数的命名−函数名必须以英文字母或下划线开头,后面可以跟任意数量的英文字母、数字、下划线或其组合。−不能以关键字作为函数名称,如break、empty、do等。−函数名不区分大小写,如search()和SEARCH()指的是同一个函数,这点与变量的命名不同。−以表达函数的动作意义为原则,一般以动词开头,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。如:changeLanguage()getBackground()§6.2函数的调用当函数定义完成后,要想在程序中发挥函数的作用,必须调用这个函数。函数的调用非常简单,只需引用函数名,并传入相应的参数即可。函数调用的语法格式如下:函数名称([参数1,参数2……])dom1.php§6.3函数的参数在调用函数时,需要向函数传递参数,根据参数使用的位置,参数分为形式参数和实际参数。被传入的参数为实参,而函数定义的参数为形参。参数传递的方式有:−按值传递−按引用传递−按默认参数传递值传递值传递的方式是给函数传递了一个参数的副本,所以它并不会改变函数外部的值。dom2.php在函数内数值确实交换了,而在函数外部数值却没有变化。证明了值的传递只是传递变量的副本。引用传递参数的引用传递就是将实参的内存地址传递到形参中,因此函数对参数的操作会被保留,返回后实参的值会发生变化。引用传递方式就是在传值时在原基础上加上“&”符号。dom3.php默认参数(可选参数)还有一种设置参数的方式,即可选参数。可以指定某个参数为可选参数,将可选参数放在参数列表的末尾,可指定默认值为空。例:应用可选参数实现一个简单的价格折扣计算功能。dom4.php§6.4函数的返回值有时,希望在调用一个函数后,能得到一个确定的值,这个值即为函数的返回值。在PHP函数中,使用return语句返回函数值,return语句会立即中止函数的运行,并且将程序控制权交回到调用该函数的代码行。return语句后紧跟的返回值可以为变量、常量、数组或者表达式等。应用编写一个计算圆面积的函数,当客户输入半径后可输出圆的面积。注意:函数会返回值,但不会打印计算结果,所以需要在调用函数时将结果赋予给一个变量,然后再用echo()打印结果。dom6.php§6.5函数中变量的作用域函数中定义的变量称为局部变量,它的作用范围就是函数内,函数调用完毕后,这个变量也就消失了。在函数外定义的变量称为全局变量,全局变量的作用范围在整个PHP文件,但在函数中不会被读到,不会影响到函数中的同名变量。当调用函数尝试输出全局变量$a时,程序会报变量未定义的错误,即没有这个变量。dom7.php使用global关键字定义全局变量在函数范围内使用全局使用global把局部变量声明为全局变量PHP内置函数PHP有许多内置函数,可以应对几乎所有的需求。它之所以简洁易用,也就是它内置了大量功能强大的函数,只要能熟练地操作这些函数,就可以通过少量的代码实现复杂的功能。常见的基本函数有:−生成随机数rand(min,max)可在此范围返回随机整数−max()返回两个指定数中的最大值−Min()返回参数中数值最小的值。−Md5(string,charlist)加密,管理员和程序设计也无法看到用户密码§6.6字符串相关函数在PHP开发中,除了可自定义函数,还可以使用PHP提供的内置函数。针对字符串的操作,PHP提供了相应的字符串函数。通常有字符串的格式化、字符串的分割和连接、字符串的比较及字符串的查找匹配和替换。这些函数功能强大,使用也很简单。§6.6.1字符串连接和分割−字符串分割函数Explode()−字符串分割函数strtok()−字符串连接函数implode()字符串分割函数Explode()在程序开发中,经常需要按照某种规则对字符串进行分割,例如,按照“@”符号分隔邮箱账号,获取“@”后的邮箱域名。在PHP中,可以通过调用explode()函数实现字符串的分割功能声明方式如下所示:arrayexplode(stringseparator,string$str[,int$limit])该函数有三个参数,第一个参数separator提供一个分割字符或是字符串,第二个参数string是被分割的字符串;第三个参数limit是指定最多将字符串分割为多少个子串。该函数返回一个由被分割的子字符串组成的数组。dom8.php$limit有三种取值情况:正数:返回的数组包含最多limit个元素,且最后那个元素包含$str的剩余部分负数:返回除了限制limit个数元素外的所有元素。参数“0”:会被当作1字符串分割函数strtok()strtok()函数把字符串分割为更小的字符串,对字符串进行逐一分割。stringstrtok(string$str,stringseparator)dom9.phpstr提供一个要分割的字符串,使用separator对字符串进行一次分割,若要进行多次分割,需连续调用该函数,在以后的调用过程中,不需要指定str参数。字符串连接函数implode()在程序开发中,除了可以将字符串按照指定的规则分割外,还可以将数组中所有元素拼接组合成新的字符串。在PHP中通过调用implode()函数实现字符数组的拼接功能。stringimplode(string$glue,array$arr)函数前面的string表示函数的返回值类型是字符串类型。参数$glue为连接符。$arr为待合并的数组。dom10.php§6.6.2子字符串操作函数−取出指定位置的子字符串substr()−计算子字符串出现的频率函数substr_count()−取出字符串中指定子串的剩余字符串strstr()substr()函数在程序开发中,常常需要截取一个字符串中的某一部分,也就是获取字符串中的某个子串。在PHP中,专门提供了substr()函数用来获取字符串的子串,其声明方式如下所示:stringsubstr(string$str,int$start[,int$length])−参数$str用于表示待处理的字符串−参数$start表示,从位置为start的字符处开始进行截取−参数$length表示截取的子串长度为$length,该参数是可选的,如果$length为空,则默认截取到字符串的末尾。dom11.phpsubstr_count()函数返回字符串str中出现子字符串的次数。intsubstr_count(string$str,string$substr)−参数$str用于表示待处理的字符串−参数$substr子字符串dom12.phpstrstr()函数用于获取一个指定字符串在另一个字符串中首次出现的位置到后者末尾的子字符串,如果执行成功,则返回剩余字符串(存在相匹配的字符);如果没有找到相匹配的字符,则返回false。。stringstrstr(string$str,string$substr)在字符串str中取出从substr字符串开始的剩余子串,若没有substr子串,函数返回FALSE。dom13.php§6.6.3字符串替换函数:str_replace()和str_ireplace()在程序开发中,经常会对字符串中的某些字符进行替换操作,这时可以通过str_replace()函数和str_ireplace()函数来完成。其声明方式如下所示:$search参数表示被替换掉的字符串,$replace参数表示替换后的字符串,$subject参数表示需要被操作的字符串,count()函数是用来统计$search参数被替换的次数.str_ireplace()函数不区分大小写。mixedstr_replace(mixed$search,mixed$replace,mixed$subject[,int&$count])dom14.php§6.6.4字符串比较函数在程序开发中,经常需要对两个字符串进行比较操作。例如,按照字节的ASCII值进行比较可以使用strcmp()函数和strcasecmp()函数来实现。它们两者的区别在于strcasecmp()不区分比较字符串的大小写。intstrcmp(string$str1,string$str2)−int函数的返回值类型是整数,参数$str1和$str2均表示待比较的字符串。−首先比较第一个字符的大小,如果相等则继续比较第二个字符,如果第二个字符也相等则继续比较第三个字符,以此类推,直到比较到有不相同的字符或者字符串的结尾才停止比较返回比较结果。dom15.php−如果字符串$str1和$str2相等,则函数返回0;−如果字符串$str1小于$str2,则函数返回值小于0;−如果字符串$str1大于$str2,则函数返回值大于0。§6.6.5字符串长度函数在程序开发中,经常需要统计字符串的长度,字符串的长度实际上就是指字符串中字符的个数。在PHP中,可以通过使用strlen()函数来获取字符串的长度,其声明方式如下所示:−int表示strlen()函数的返回值类型是整数类型,−参数$str用于表示待获取长度的字符串intstrlen(string$str)dom16.php§6.6.6字符串裁剪函数trim()、rtrim()和ltrim()在编写程序时,有时需要过滤字符串中的空白字符,例如,去除用户注册邮箱中的首尾两端的空白字符,可通过下面三个函数,分别去除字符串左侧、右侧、两侧的空白字符,其声明方式如下:−参数$str用于表示待处理的字符串,−参数$charlist是可选的,若指定了$charlist,则函数会从字符串末端开始删除$charlist指定的字符,−若没有指定$charlist,则函数会从字符串末端开始删除空白字符。stringltrim(string$str[,string$charlist])stringrtrim(string$str[,string$charlist])stringtrim(string$str[,string$charlist])注意:−在PHP中,除空格外,还有很多字符属于空白字符如:−\0-ASCII0,NULL−\t-ASCII9,制表符−\n-ASCII10,新行−\x0B-ASCII11,垂直制表符−\r-ASCII13,回车−-ASCII32,空格此外还可以用“..”符号指定要去除的一个范围,如“0..9”或“a..z”dom17.php字符串与ASCII码在字符串处理中,使用ord()函数可以返回字符的ASCII码,也可以使用chr()函数返回ASCII对应的字符。如:?phpechoord(A);//输出65echochr(98);//输出b?§6.7日期和时间函数UNIX时间戳Unix时间戳(Unixtimestamp)是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。以32位二进制数来表示,其中1970年1月1日零点也叫Unix纪元。将日期和时间转换为时间戳使得PHP中的日期和时间计算变得简单。PHP提供了mktime()函数用于返回一个指定时间的时间戳在上述声明中,该函数的返回值是一个Unix时间戳,参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。intmktime([int$hour[,int$minute[,int$second[,int$month[,int$day[,int$year[,int$is_dst]]]]]])格式化输出使用Unix时间戳保存和计算时间非常