前言
函数就是由一定的功能的一些语句组织在一起的一种形式,定义函数的目的就是将程序按功能分块,方便程序的使用、管理、阅读和调试。函数有两种,一种是别人写好的或是系统内部提供的函数,即是内置函数,你只要知道这个函数是干什么的,自己会用就可以,不用管里面究竟是怎么实现的。另一种函数就是自定函数,顾名思义就是需要我们根据自己的需求自己实现的函数。函数的概念比较抽象,会有一些读者难以理解。
函数是什么(函数的定义)
像数学中的函数一样,在数学中,y=f(x)是基本的函数表达形式,x可以看作参数,y可以看作是返回值,所以函数定义就是一个被命名的、独立的代码段,它执行特定的任务,并可能给调用它的程序返回一个值。该定义中的各部分含义如下:
- 函数是被命名的:每个函数都有唯一的名称,在程序的其他部分使用该名称,可以执行函数中的语句,称为调用函数
- 函数是独立的:无需程序其他部分的干预,函数便能够单独执行其任务.
- 函数执行特定的任务:任务是程序运行时所执行的具体工作,如将一行文本输出到浏览器,对数组进行排序,计算立方根等等
- 函数可以将一个返回值返回给调用它的程序:程序调用函数时,将执行该函数中的语句,而这些语句可以将信息返回给调用它们的程序
PHP的模块化程序结构都是通过函数或对象来实现的,函数则是将复杂的PHP程序分为若干个功能模块,每个模块都编写成一个PHP函数,然后通过在脚本中调用函数,以及在函数中调用函数来实现一些大型问题的PHP脚本编写。
使用函数的优势有以下几点:
- 提高程序的重用性
- 提高软件的可维护性
- 提高软件的开发效率
- 提高软件的可靠性
- 控制程序设计的复杂性
函数是程序开发中非常重要的内容,因此对函数的定义,调用和值的返回等,尤为重要,一定要注重理解和应用,通过上机调试加以巩固。
自定义函数
编写函数是首先要明白你要做什么,也就是你希望函数实现什么功能,即是所谓的明确需求.知道这一点后,编写起来便不会太难。在PHP中除了已经提供给我们使用的系统函数,还可以根据模块需要自定义函数。所谓的系统函数是在PHP中提供的可以直接使用的函数,每个系统函数都是一个完整的可以完成指定任务的代码段。学会一个系统函数,就多一个PHP的功能。在开发时,一些常用的功能都可以借助调用系统函数来完成。如果某些功能模块在PHP中没有提供系统函数,就需要根据自己的需求来自定义函数。完成同样的任务,使用系统函数的执行效率会比自定义函数高,但两种函数在程序中的调用方式是没有区别的。
函数声明
在PHP中声明一个自定义的函数的语法格式如下:
<?php
function 函数名([参数1,参数2,...,参数n]) //函数头 定义函数式
{
// 要执行的代码:函数体
return 返回值; //可以从函数中返回一个值,就是我们数学中的f(x)
} //函数体一定要用花括号括住,在编程中一般括都是成对出现的
?>
PHP 函数准则:
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头(不能以数字开头)
函数的语法格式说明:
- 每个函数的第一行都是函数头,又声明函数的关键字function,函数名和参数列表三部分组成,其中每一部分完成待定的功能
- 每个自定义函数都必须使用function关键字声明
- 函数名可以代表整个函数,可以将函数命名为任何名称,只要遵循变量的命名规则即可。每个函数都有唯一的名称,但需要注意的是,在PHP中不能使用函数重载,所以不能定义重名的函数,也包括不能和系统函数同名,否则造成冲突。给函数指定一个描述其功能的名称是个不错的主意。命名一定要做到见名知意,所以在编程中其名也是一门艺术。
- 声明函数时函数名后面的括号也是必须有的,在括号中表明了一组可以接受的参数列表,参数就是声明的变量,然后在调用函数时递给它值。参数列表可以没有,也可以有一个或多个参数,多个参数使用逗号分隔。
- 函数体位于函数头后面,用花括号括起来。实际的工作是在函数体中完成的。函数被调用后,首先执行函数体中的第一条语句,执行到return语句或最外面的花括号后结束,返回到调用的程序,在函数体中可以使用任何有效的PHP代码,甚至是其他的函数或类的定义也可以在函数体中声明。
- 使用关键字return可以从函数返回一个值,在return后面加上一个表达式,程序执行到return语句时,该表达式将被计算,然后返回到调用程序处继续执行。函数的返回值为该表达式的值。
因为参数列表和返回值在函数定义时都是可选的,其他的部分是必须有的,所以声明函数时通常有以下几种方式:
1、在声明函数时可以没有参数列表
<?php
function 函数名(){
函数体;(语句块)//你想让函数做的一些事
return 返回值;
}
?>
2、在声明函数时可以没有返回值
<?php
function 函数名([参数1,参数2,...,参数n]){
函数体;(语句块)//你想让函数做的一些事
}
?>
3、在声明函数时可以没有参数列表和返回值
<?php
function 函数名(){
函数体;(语句块)//你想让函数做的一些事
}
?>
4、有参数列表有返回值
<?php
function 函数名([参数1,参数2,...,参数n]){
函数体;(语句块)//你想让函数做的一些事
return 返回值;
}
?>
我们在前面学习for循环的时候写过一个双层循环输出九九乘法表,如果在一个程序中的不同地方多次使用同样的输出,显然每次都定义一个这样的双层循环不太合适。软件会变得很复杂,不仅代码会非常臃肿,而且可维护性也非常差,开发效率和可靠性都会降低。解决这样的问题就是将这个特定的任务编写成一个模块,也就是将完成功能的所有代码使用花括号括起来,并起一个名字,然后使用function关键字声明为一个函数。这样,在需要输出此九九乘法表的地方,只要通过函数名调用一下,就会执行一次函数内部的代码,并在调用的位置输出数字。函数只被声明一次,就可以在任何需要的地方调用执行,提高了代码的可重用性。而且只要函数内部的代码有所改动,所有调用该函数的地方都会随着改变,提高了代码的可维护性,因此开发效率和可靠性都会提高。将输出九九乘法表的代码改动如下:
<?php
function multiplicationTable(){
for($i=1;$i<=9;$i++){
for($j=1;$j<=$i;$j++){
echo "$j x $i = " . ($j*$i) . " ";
}
echo "<br>";
}
}
上述代码中定义了一个multiplicationTable()函数,只是需要输出数字,也无需外部变量控制的地方,所以无需参数列表和返回值,这是最简单的自定义函数。
上面的函数没有被调用是没有任何输出的,因为没有调用函数体内的代码不会执行,调用方法很简单:
multiplicationTable();
执行结果: