函数补充案例_第1页
函数补充案例_第2页
函数补充案例_第3页
函数补充案例_第4页
函数补充案例_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 补充案例案例3-1 函数的调用一、案例描述 1、 考核知识点函数的调用2、 练习目标Ø 掌握函数的定义与调用之间的关系3、 需求分析在PHP中,程序对函数是进行预处理的,所以在同一个文件中,定义和调用函数是没有先后之分的,但是当我们调用包含文件中的函数时定义和调用函数是不是也没有先后之分呢?现在举例假设:在functions_inc.php中定义一个获得最小值的函数getMin($m,$n),我们在一个测试的文件func.php中,先调用getMin($m,$n)函数,再包含functions_inc.php文件,来看看我们的猜测是否正确吧。4、 设计思路(实现原理)1)在f

2、unctions_inc.php中定义一个获得最小值的函数getMin($m,$n),并返回执行结果。 2)在测试文件func.php中,先调用getMin($m,$n),并输出结果,再包含文件functions_inc.php。二、案例实现1、在functions_inc.php文件中,定义getMin($m,$n),代码如下:<?phpfunction getMin($m, $n)return $m<$n ? $m : $n;2、测试文件func.php,代码如下:<?phpecho getMin(23, 17);include './functions_inc.

3、php'运行程序,函数定义与调用不在同一个文件中,调用在包含文件的前面,或报函数未定义的错误,结果如下图所示:三、案例总结1、在同一文件中,可以先调用后定义函数。原因:PHP会对函数进行预处理。但这样的习惯不好。2、如果调用的函数在包含文件中,不能先调用,后包含。原因:在程序运行过程中,编译器只是对其进行语法检查,而include语句只有在被执行时才会读入要包含的文件,即定义函数文件。案例3-2 函数的返回值一、案例描述 1、考核知识点函数的返回值2、 练习目标Ø 掌握函数的返回值各种情况3、 需求分析在PHP中,使用return语句可以将返回值传递给调用者,并且return

4、语句后紧跟的返回值可以为变量,常量,数组,或者表达式等。为了帮大家更好的理解函数的返回值,我们设计一个函数没有return,看看其是否有返回值,函数有return但是后面没有数据,看看其是否有返回值,函数中有多个return是否可以。4、 设计思路(实现原理)1) 编写一个函数getAge(),让其没有return关键字。2) 编写一个函数getName(),让其return后面没有数据。 3)编写一个函数getGrade($score),判断传递过来的$score,当其大于60时,返回pass,否则返回fail。二、案例实现1、在functions_inc.php文件中,定义getMin($

5、m,$n),代码如下:<?phpfunction getAge()function getName()return;function getGrade($score)if($score > 60)return 'pass'elsereturn 'fail'var_dump(getAge();echo '<hr>'var_dump(getName();echo '<hr>'var_dump(getGrade(75);运行程序,结果如下图所示:三、案例总结1、函数没有return时,也是有返回值的,

6、其值为NULL。2、函数有return,但是后面没有数据,也是有返回值的,其值为NULL。3、函数代码中可以有多个return。4、函数体代码运行到return,那么后面的代码就不会再被执行,函数将结束运行。案例3-3 函数的参数一、案例描述1、 考核知识点函数的参数2、 练习目标Ø 熟练掌握函数形参和实参的用法3、 需求分析定义一个函数concat,不设置此函数的形参,可以接收不定数量字符串参数,将其连接,并返回结果。 4、 设计思路(实现原理)1)定义一个函数concat(),使用func_get_args()函数接受传递过来的字符串参数,并将其连接,返回结果。 2)调用函数co

7、ncat(a,true,-3.56),并将结果输出。二、案例实现1、定义一个函数concat(),代码如下:<?php/把不定数量的字符串参数连接成一个字符串并返回function concat()$arr = func_get_args();/使用数组遍历方法$str = ''foreach($arr as $v)$str .= $v;return $str;var_dump(concat('a', true, -3.56);运行程序,结果如下图所示:三、案例总结在函数内部,我们可以使用func_get_args()函数以数组的形式接收传递过来的参数。案

8、例3-4 参数数量一、案例描述1、考核知识点参数数量2、 练习目标Ø 熟练掌握调用函数时实参与形参的数量之间的关系3、 需求分析定义一个函数sayHello,设置三个形参,并给一个形参设置默认值,调用此函数并给其相同数量的实参,调用此函数并给其多于形参的实参,调用此函数并给其(不含已有默认值的形参)的实参,调用此函数并不给其实参,观察其结果。4、 设计思路(实现原理)1)定义一个函数sayHello($schoolname,$classname,$linkchar=”LINKCHAR”)。2)调用sayHello(使用不同数量的实参)。二、案例实现1、定义一个函数concat(),代

9、码如下:<?phpfunction sayHello($schoolname, $classname, $linkchar="LINKCHAR")echo $schoolname, $linkchar, $classname, '<br>'2、定义测试数据,代码如下:sayHello('itcast', 'php0421', '&nbsp;');sayHello('itcast', 'php0421', '=', 'very go

10、od.');sayHello('itcast', 'php0421');sayHello('itcast');运行程序,结果如下图所示:三、案例总结1、正常情况函数调用使用的实参数量是和函数定义的形参数量是一致的。2、我们调用的实参如果比形参数量少,未传递的实参对应的形参(且是靠右的)有默认值时,可以省略,不是这种情况,则会出错。3、调用函数的实参的数量比形参多的话,不会有影响,PHP会把多出的参数忽略掉。案例3-5 函数中变量的作用域一、案例描述1、 考核知识点函数中变量的作用域2、 练习目标Ø 掌握全局变量在函数内部使用的方

11、法3、 需求分析全局变量是不能直接在函数内部使用的,需要使用global关键字,或使用$GLOBALS超全局预定义数组变量。现在举例说明:假设在函数外定义一个全局变量$link ,用于存储连接数据库的资源,然后我们在函数getUsersInfo()函数中直接使用$link,与在函数getUsersInfo()中使用关键字global声明$link,或是使用$GLOBALS超全局预定义数组变量,进行对比。4、 设计思路(实现原理)1)编写PHP文件link.php,获取连接数据库的资源$link,设定字符集,选择数据库。 2)在link.php中编写getUsersInfo()这个函数,执行获取

12、用户信息语句,并同时传递$link。二、案例实现1、在link.php中定义getUsersInfo函数,代码如下:<?php$link = mysql_connect('localhost','root','123456')or die('数据库连接失败!');mysql_query('set names utf8',$link);$mysql_select_db('mysql',$link);function getUsersInfo()$result = mysql_query(&quo

13、t;select User from user",$link);while($row = mysql_fetch_assoc($result)print_r($row);getUsersInfo();运行程序,结果如下图所示:对比,代码如下:<?php$link = mysql_connect('localhost','root','123456')or die('数据库连接失败!');mysql_query('set names utf8',$link);mysql_select_db('

14、mysql',$link);function getUsersInfo()global $link;$result = mysql_query("select User from user",$link);while($row = mysql_fetch_assoc($result)print_r($row);getUsersInfo();运行程序,结果如下图所示:对比,代码如下:<?php$link = mysql_connect('localhost','root','123456')or die('

15、数据库连接失败!');mysql_query('set names utf8',$link);mysql_select_db('mysql',$link);function getUsersInfo()$result = mysql_query("select User from user", $GLOBALS"link");while($row = mysql_fetch_assoc($result)print_r($row);getUsersInfo();运行程序,结果如下图所示:对比,代码如下:<?ph

16、p$link = mysql_connect('localhost','root','123456')or die('数据库连接失败!');mysql_query('set names utf8',$link);mysql_select_db('mysql',$link);function getUsersInfo($link)$result = mysql_query("select User from user",$link);while($row = mysql_fetch

17、_assoc($result)print_r($row);getUsersInfo($link);运行程序,结果如下图所示:三、案例总结全局变量在函数的局部使用,必须通过:1、通过参数传递,传值和传引用。2、通过global关键字来提升。3、通过$GLOBALS预定义超全局数组变量。案例3-6 递归函数 一、案例描述1、 考核知识点递归函数2、 练习目标Ø 熟练掌握递归函数的妙处3、 需求分析递归函数通常有很高的使用价值,常用来将复杂的问题分解为简单的并相同的情况,反复做这种处理直到问题解决。现在举例假设:有一只猴子摘了一堆桃子,当即吃了一半,可是桃子太好吃了,它又多吃了一个,第二天

18、它把第一天剩下的桃子吃了一半,又多吃了一个,就这样到第十天早上它只剩下一个桃子了,问它一共摘了多少个桃子?4、 设计思路(实现原理)1)编写一个函数peach($n),每次都判断一下$n 是否等于1,如等于1,则返回1;如不相等,则$n -1 ,再调用自身peach(),并传递$n-1的结果。二、案例实现1、peach()函数,代码如下<?phpfunction peach($n)if($n = 1)return 1;return 2*(peach($n - 1) + 1);echo peach(2), '<br>'echo peach(3), '&l

19、t;br>'echo peach(9), '<br>'echo peach(10), '<br>'运行程序,结果如下图所示:三、案例总结1、递归函数必须要有结束的条件,否则就是死循环。2、一定要找到合适的递归条件。3、递归函数的运算量很大,所以要谨慎使用。案例3-7 explode()函数一、案例描述1、 考核知识点explode()函数2、 练习目标Ø 熟练explode()函数的用法3、 需求分析PHP提供的内置的字符串函数,功能非常的强大,很容易的就能实现我们想要的业务逻辑,减少我们编程的难度,其中explo

20、de()函数可以对字符串进行分割操作。 现在举例假设:字符串“open_door”转换成“OpenDoor”、“make_by_id”转换成“MakeById”。4、 设计思路(实现原理)1)编写一个函数change_str($str)。 2)将传递过来的$str字符串,转换成数组$arr。 3)把数组$arr中的每个元素的开头字符转换成大写,并放回数组$arr中。 4)把数组$arr转换成字符串返回。二、案例实现1、编写函数change_str,代码如下:<?php/* *param $str string 要转换的字符串 *return string 转换后的字符串 */functi

21、on change_str($str)$arr = explode('_',$str);$arr = array_map('ucfirst',$arr);return implode('',$arr);2、定义测试数据,代码如下:<?php /测试$str1 = "open_door"$str2 = "make_by_id"echo change_str($str1);echo "<br />"echo change_str($str2);运行程序,结果如下图所示:三、

22、案例总结1、在PHP中,可以通过调用explode()函数实现字符串的分割功能,从而辅助完成我们想要的其他功能。2、explode()函数还可以用于把字符串转换成数组。案例3-8 implode()函数一、案例描述1、考核知识点implode ()函数2、练习目标Ø 熟练implode()函数的用法3、需求分析PHP提供的内置的字符串函数,功能非常的强大,很容易的就能实现我们想要的业务逻辑,减少我们编程的难度,其中implode()函数可以把数组转换成字符串。 现在举例假设:把一个关联数组的键连接成一个字符串,并且返回结果。4、设计思路(实现原理)1)编写一个函数implode_ke

23、y(),并给它两个形参,一个是连接字符串的字符$glue,一个是待连接字符串的数组$pieces。 2)将数组中的键放在另外的一个数组$arrK中。 3)用implode()函数将放在另外一个数组$arrK中的数组元素使用$glue连接成字符串,并将结果返回。二、案例实现1、编写函数implode_key,代码如下:<?phpfunction implode_key($glue = "", $pieces = array() $arrK = array_keys($pieces); return implode($glue, $arrK); $arr = array(

24、'banana' => 'yellow','apple'=> 'red','grape'=>'purple',);echo implode_key("_",$arr);运行程序,结果如下图所示:三、案例总结在PHP中, implode()函数可以将数组转换成我们想要的字符串形式。案例3-9 strcmp()函数一、案例描述1、考核知识点strcmp()函数2、练习目标Ø 熟练strcmp()函数的用法3、需求分析PHP提供的内置的字符串函数,功能非常的

25、强大,很容易的就能实现我们想要的业务逻辑,减少我们编程的难度,其中strcmp()函数可以对字符串进行比较操作(二进制形式)。现在举例假设:比较两次输入的密码(由字母和数字组成)是否正确。 4、设计思路(实现原理)1)(伪操作)随意给出两次输入的密码的值(由字母和数字组成)。 2)判断两次输入的密码是否相等,并输出相应的提示语句。二、案例实现1、编写伪代码,代码如下:<?php /假设这是第一次输入的密码 $pw1 = "yeah" /假设这是再次确认的密码 $pw2 = "yeah" if (strcmp($pw1, $pw2) / This r

26、eturns false. echo '$pw1'. "and ".'$pw2'." are NOT the same." else echo '$pw1'. "and ".'$pw2'." are the same." 运行程序,结果如下图所示:三、案例总结在PHP中,可以通过调用strcmp ()函数完成二进制字符串的比较。案例3-10 str_replace()函数一、案例描述1、考核知识点str_replace()函数2、练习目标Ø

27、熟练str_replace()函数的用法3、需求分析PHP提供的内置的字符串函数,功能非常的强大,很容易的就能实现我们想要的业务逻辑,减少我们编程的难度,在程序开发中,经常会对字符串或数组中的某些字符进行替换操作,这时可以通过str_replace()函数来完成。 现在举例假设:把数组中的某些字符串特换成我们想要的字符串。 4、设计思路(实现原理)1)随意定义一个一维数组。 2)把要目标字符串放在一个变量中保存。 3)把目标的替换值放在一个变量汇总保存。 4)使用str_replace()函数进行替换,并将结果返回。二、案例实现1、编写程序,代码如下:<?php /执行替换的数组 $su

28、bject = array("You should eat this","this","and this every day."); /查找的目标值 $search = "this" /目标值的替换值 $replace = "that" /替换后的数组 $new = str_replace($search, $replace, $subject); print_r($new);运行程序,结果如下图所示:三、案例总结在PHP中,可以通过调用str_replace ()函数将我们想要替换的字符串或是

29、数组中的字符串替换我们想要的形式。案例3-11 substr ()函数一、案例描述1、考核知识点substr()函数2、练习目标Ø 熟练substr()函数的用法3、需求分析PHP提供的内置的字符串函数,功能非常的强大,很容易的就能实现我们想要的业务逻辑,减少我们编程的难度,在程序开发中,常常需要截取一个字符串中的某一部分,也就是获取字符串中的某个子串。在PHP中,专门提供了substr()函数用来获取字符串的子串。现在举例假设:获得某个地址字符串中image首次出现的位置到字符串结尾的子字符串。4、设计思路(实现原理)1)随意编写一个路径(其中要含有image)。 2)获取该路径中

30、某个字符串首次出现的位置到结尾的子字符串,并将其返回。二、案例实现1、编写程序,代码如下:<?php$image="C:/www/vhosts/ ;$image=substr($image,strpos($image,'image',(strlen($image)-strpos($image,'image'); echo $image."<br/>"运行程序,结果如下图所示:三、案例总结1、在PHP中,substr()函数常常与strpos()和strlen()函数配合使用。2、strpos()函数的语法,如下所示:int strpos ( string $haystack , mixed $needle , int $offset = 0 )在上述声明中,$haystack代表在该字符串中进行查找。$needle代表如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。$offset代表可选的 offset 参数可以用来指定从 haystack 中的哪一个字符开始查找。返回的数字位置是相对于 haystack 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论