第4章自定义函数_第1页
第4章自定义函数_第2页
第4章自定义函数_第3页
第4章自定义函数_第4页
第4章自定义函数_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

第4章自定义函数4.1自定义函数4.2变量的作用域4.3变量的生存期第4章自定义函数学习目的与要求掌握PHP自定义函数的定义与调用掌握PHP自定义函数的参数传递方法掌握PHP局部变量、全局变量的应用方法问题:求1+2+3+…+n的和?

对于要经常用到的功能,有没有比较好的办法呢?-----把它定义成函数4.1自定义函数在编程过程中,若有一段代码需要反复调用,就可以考虑把它写成函数,在需要的时候就可以调用它。编写函数的目的就是为了简化编程,优化代码,提高效率,便于维护,避免重复开发。4.1.1自定义函数的定义与调用1.函数的定义在PHP中自定义函数的语法格式如下:

functionfun_name($arg_1,$arg_2,…,$arg_n){

函数体return结果值;}下面对自定义函数的语法格式做说明。function:声明自定义函数时必须使用的关键字。fun_name:自定义函数名称。其命名遵循变量命名规则,但不能以“$”开头。$arg_1,…,$arg_n:函数的参数。多个参数之间以逗号隔开,参数的类型可以不指定。函数体:函数被调用时执行的代码。return:返回函数的执行结果,并结束函数的运行问题:求1+2+3+…+n的和?

<?phpfunctionhe($n){$sum=0;for($i=1;$i<=$n;$i++){ $sum=$sum+$i;}return$sum;}echo"1+2+3+…+100的和:".he(100);

?>2.自定义函数的调用调用自定义函数时,一定要先声明自定义函数,然后才可以调用。调用自定义函数的语法格式如下:

fun_name(value_1,value_2,…,value_n);

下面对调用自定义函数的有选项做说明。fun_name:调用自定义函数的函数名,函数名大小写不敏感。value_1…value_n:传递给函数的参数值。参数的个数、顺序要与函数定义时的个数、顺序保持一致。

删除【实例4-1】定义函数fun(),其功能是计算传入参数n的阶乘。

结果为:120<?phpfunctionfun($n){$s=1;for($i=1;$i<=$n;$i++)$s*=$i;return$s;}echofun(5);?>4.1.2在函数间传递参数在调用函数时,需要向函数传递参数,被传入的参数称为实际参数(简称实参),而函数定义的参数称为形式参数(简称形参)。自定义函数的参数传递方式有三种:按值传递、按引用传递和可选参数。1.值传递方式按值传递是将实参的值“复制”到对应的形参,在函数内部针对形参进行操作,对形参操作的结果不会影响到实参原来的值,即函数返回后,实参的值不发生变化。【实例4-2】按值传递函数参数示例。

<?php

header("Content-Type:text/html;charset=gb2312");functionfun($number) //定义函数,按值传递参数的值{$number=$number+10;echo$number; //函数内输出形参的值}$n=20;echo"传递前:",$n,"<br/>"; //变量n传递前的值echo"函数中:",fun($n),"<br/>";//将$n的值传递给

形参$numberecho"传递后:",$n,"<br/>";/实参的值没有发生变化?>

通过本实例的运行结果可以看出,函数的参数在使用按值传递方式时,函数内部只针对形参进行操作,不改变实参的值。提示:

在使用按值传递方式时,在函数fun()被调用的时候,系统为参数$number分配了内存空间,但系统没有为参数值分配新的内存空间。当参数$number的值发生变化时,系统为$number的值分配新的内存空间。当函数fun()运行完毕结束调用时,系统回收函数调用期间分配的所有内存空间。2.引用传递方式按引用传递就是将实参的内存地址传递给对应的形参。此时,在函数内部的操作都会影响到实参的值,返回后,实参的值会发生变化。使用引用传递方式,要在函数的参数前加一个“&”符号。【实例4-3】按引用传递函数参数示例。

<?php

header("Content-Type:text/html;charset=gb2312");functionfun(&$number)//定义函数,按引用方式传递参数的值{$number=$number+10;echo$number;//函数内输出形参的值}$n=20;echo"传递前:",$n,"<br/>"; //变量n传递前的值echo"函数中:",fun($n),"<br/>";//将$n的值传递给形参$numberecho"传递后:",$n,"<br/>";//实参的值发生变化

?>程序运行过程中的内存分配图,如下图所示提示:

在使用按引用传递方式时,函数fun()被调用时,系统为形参$number分配了内存空间,此时形参$number和实参$n共同指向了同一个变量值。当形参$number的值发生变化时,实参$n的值也同时发生变化。当函数fun()运行完毕结束调用时,系统回收调用函数期间分配的所有内存空间。3.可选参数(默认参数)可选参数就是指定某个参数为可选参数,将可选参数放在参数列表末尾,并且指定其默认值为空。【实例4-4】函数参数按可选参数传递示例。

<?phpheader("Content-Type:text/html;charset=gb2312");functionfun($value,$para="")//最后一个参数初始值为空{$value=$value+$para;echo$value,"<br/>";//函数内输出形参的值}fun(10,2);//可选参数值为2fun(10);//没有为可选参数赋值?>

4.1.3函数的返回值在PHP中,自定义函数将返回值传递给调用者的方式有两种:使用函数return()返回一个值或使用list()语言结构返回多个值。1.return()函数return()将函数的值返回给函数的调用者,即将程序控制权返回给调用者的作用域。【实例4-5】编写函数circle(),其功能是计算圆的面积。

<?phpheader("Content-Type:text/html;charset=gb2312");functioncircle($r){$s=3.14*$r*$r;return$s;}$n=10;$area=circle($n);echo"圆面积:",$area;?>

程序运行结果:圆面积:3142.list()语言结构通过list()语言结构可以从函数中返回多个值,list()的语法结构为

voidlist(varname_1,varname_2,…)

list()不是真正的函数,而是语言结构,list()可以一次将多个值赋给不同的变量。【实例4-6】通过list()语言结构接收函数返回的多个值。

<?phpfunctionfun(){$value[0]=10;$value[1]=20;$value[2]=30;return$value;//返回数组value的3个元素的值}list($a,$b,$c)=fun();//将函数fun()的返回值依次赋给变

量$a、$b、$cecho"a=",$a,"b=",$b,"c=",$c;?>提示:

●list()仅能用于数组的下标为数字的,而且数组的下标从0开始。

●list()所列出的变量个数不能多于函数返回值的个数,

如上例中的list()语句若写成:

list($a,$b,$c,$d)=fun();

即为错误,其中的变量$d是多余的。4.2变量的作用域变量的作用域就是变量的适用范围。根据变量的作用域可以将变量分为全局变量和局部变量。变量在PHP程序中的位置决定了变量的作用域。局部变量:在函数内部定义的变量(包括函数的参数)。局部变量在函数调用结束后会被系统自动回收。全局变量:在所有函数之外定义的变量。全局变量可以被PHP程序中的所有语句访问(不包括自定义函数内部的PHP语句)。当PHP程序执行到程序末尾的时候,全局变量才会被系统自动回收。全局变量也可以应用于include语句和require语句所引用的PHP程序文件。如果某函数内的PHP语句要访问全局变量,就要在该函数内定义的变量前加关键字global,这样函数外部的全部变量就变成局部变量了。【实例4-7】全局变量和局部变量应用示例。

<?phpheader("Content-Type:text/html;charset=gb2312");functionfun($n){global$m;//在$m变量前加global,则可访问全局变量m$m=$n+10;echo"函数内:",$m,"<br/>";}$m=15;//$m为全局变量fun($m);echo"函数外:",$m,"<br/>";?>当程序调用函数fun()时,PHP预处理器创建一个局部变量(函数形参)$n,其值为15(由全局变量$m传递);当程序执行到“global$m;”时,便可访问全局变量$m,此时函数内部的变量$m和函数外部的变量$m为同一个变量;当程序执行到“$m=$n+10;”时,全局变量$m的值变为25,这说明声明为global的局部变量,不但可以访问同名的全局变量,而且可以改变同名全局变量的值。提示: ●函数的参数不能使用global定义。

●在函数内部使用global声明变量时,不能使用赋值语句为该变量赋值。

例如

global$m=10;

就是错误的。

●使用global语句可以一次定义多个变量,如

global$a,$b;4.3变量的生存周期在函数体内定义的变量的生存周期开始于每一次函数调用时,结束于本次函数的调用结束时刻。如果希望函数体内的变量继续存活于下一次的函数调用中,此时就要在该变量前加上关键字static,将该变量定义为静态变量。【实例4-8】静态变量与普通变量的区别。

<?phpheader("Content-Type:text/html;charset=gb2312");functionfun_1(){static$m=10;//$m为静态变量$m++;echo"静态变量",$m,"<br/>";}functionfun_2(){$n=10;//$n为普通变量$n++;

温馨提示

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

评论

0/150

提交评论