专题讲座:光盘\MR\Video\4\自定义函数.exe
视频速递:深入剖析自定义函数
在PHP中,编写程序的原则是让代码更容易阅读并且结构更加具有逻辑性,但是有时却频繁编写着相同的代码。如果能够把这些相同的代码组织起来,作为一个整体,哪里需要用到就调用到哪里,那样会更加方便。函数就实现了这样的功能,它能够将这些代码模块化,使其代码结构更加清晰。
函数是代表一组语句的标识符,它能够实现程序模块化的策略。要完成一个模块化的策略就需要定义一个函数。在PHP中定义函数的语法格式如下。
语法格式的说明如表4.16所示。
表 4.16 定义函数的语法格式说明
当函数被定义好后,所要做的就是调用这个函数。调用函数的操作十分简单,只需要引用函数名并赋予正确的参数即可完成函数的调用。
【例4.27】 为了更好地理解函数,下面定义一个函数example(),作用是计算输入数值的阶乘,在调用这个函数时给它传递一个参数,这里传的是数字10,然后输出结果。
本实例代码如下。
运行结果:10的阶乘是:3628800。
在调用函数时,需要向函数传递参数,被传入的参数称为实参,而函数定义的参数为形参。参数传递的方式有按值传递和按引用传递两种。
将实参的值复制到对应的形参中,在函数内部的操作针对形参进行,操作的结果不会影响到实参,即函数返回后,实参的值不会改变。
【例4.28】 下面通过实例了解按值传递的方式,首先定义一个简单的函数exam(),功能是将传入的参数值加1。然后在函数外部定义一个变量$n=1,最后调用函数exam(),参数为变量$n,输出函数的返回值$m和变量$m的值。
本实例代码如下。
运行结果:在函数内:$m = 2在函数外$m = 1。
从本实例的结果中可以看出,在使用按值传递方式进行参数传值时,只针对函数中的形参进行操作,实参的值不会受到影响。
实参的内存地址传递到形参中,在函数内部的所有操作都会影响到实参的值,即返回后,实参的值会相应发生变化。操作方法是,传值时只需要在原基础上加“ & ”即可。
【例4.29】 下面通过实例了解按引用传递方式的应用,仍然使用上一个实例中的代码,唯一的区别是在调用函数时传递的参数前多了个“ & ”,结果却是天壤之别。
本实例代码如下。
本实例的运行结果:在函数内:$m=2在函数外:$m=2。
从本实例的结果中可以看出,通过按引用传递方式进行参数传递,在函数内部的所有操作都影响实参的值。即形参的值发生变化后,实参的值也跟着变。
还有一种参数形式,即可选参数。它可以指定某个参数在调用时是否为必须填写的,操作方法是将可选参数放在参数列表末尾,并且指定其默认值,默认值可以为空。
【例4.30】 下面应用可选参数实现一个简单的价格计算功能的程序。设置自定义函数values的参数$tax为可选参数,其默认值为空。第一次调用该函数,并且给参数$tax赋值0.25,输出价格;第二次调用该函数,不给参数$tax赋值,输出价格。
本程序代码如下。
运行结果:价格:125价格:100。
在前面的小节中,详细介绍了如何定义和调用一个函数,并且介绍了如何在函数间传递值,这里介绍函数的返回值。通常情况下,函数将返回值传递给调用者的方式有两种:使用关键字return()返回单个值和使用list()语言结构返回多个值。
return()将函数的值返回给函数的调用者,即将程序控制权返回到调用者的作用域。注意,如果在全局作用域内使用return(),那么将终止脚本的执行。
【例4.31】 下面应用return()函数返回自定义函数的一个操作数。首先,定义函数values,本函数的作用是输入物品的单价、重量,然后计算总金额,最后输出商品的价格。
本实例代码如下。
运行结果:145。
return语句只能返回一个数据,就是说只能返回一个值。如果要返回多个结果,就要在函数中定义一个数组,将返回值存储在数组当中返回。
list()函数主要功能是将数组中的值赋给变量。通过list()语言结构可以从定义的函数中返回多个值。
语法:
像array()一样,list()不是真正的函数,而是语言结构。list()可以用一步操作给一组变量进行赋值。
list()仅能用于数字索引的数组,并假定数字索引从0开始。
【例4.32】 下面通过list()函数返回数组中的多个值。
实例位置:光盘\MR\ Instance\4\4.32
步骤为:首先,定义数组变量并为数组变量赋值,其次,利用list语句结构分别输出数组元素,本实例代码如下。
运行结果: PHP+MySQL+Apache PHP*MySQL*Apache 。