第四章:第30节 PHP函数之函数定义和调用形式介绍

更新于:2019-05-10 16:31:01

前面楠神的教程里,总会时不时出现几个函数,没学过编程的朋友可能都懵了,不知道这是什么,影响了对教程代码的理解。从这节开始我们开始学习关于PHP函数的知识。PHP的威力源自于它的强大函数库,PHP内置了超过1000个的函数,程序员就是简简单单用了PHP内置函数轻松实现了许多功能。那函数是什么?编程语言里为什么要出现函数?跟着楠神的思路往下看:


我们已学完6种数据类型、PHP运算符、PHP流程控制结构,有了这些知识,已经可以写出具有一定功能的代码。比方说比较两个数大小,求出一组数字中最大的数字和最小的数字。第27节楠神写了几行求一组数字最小值的代码,假如程序员写一个项目,多个地方都需要对一组数字求最小值,那他是不是要在每个地方都要重新写一遍同样的代码。楠神觉着那就太没必要了,毕竟有10行的代码,程序如果这样写,就会造成程序的冗余,一千行的代码被写成了一万行,反而增加程序的出错率和后期维护成本。


有句话“不要重复造轮子”,说的就是程序里不要在多个地方重复写相同的多行代码。一个功能在多个地方用到,程序员最好要把实现功能的代码打包起来,这个打包的意思就是创建一个函数,把代码放到函数里,哪个地方需要用到这个功能,就直接调用创建的函数实现就可以了。打包成函数这种方式,好处太多了,朋友们您会慢慢地体会到的。


楠神建议:开始学PHP的朋友,从现在起,您每写一个具有独立功能的函数都要分类珍藏起来,一是用来回顾复习,二是这些函数都是程序员的财富,日积月累,等以后写新项目,好多功能都不需要重新写,直接拿来用,大大提高开发速度。


PHP内置了超过1000个函数,程序员可以直接拿来用,关于内置函数,后边会做相关介绍。我们先学习怎么自己创建一个函数。

函数定义形式

function  函数名 (形参1,形参2,.... )    {

//函数体(代码块)

}


函数的名称应该提示出它的功能,函数名称要以字母或下划线开头(不能以数字开头),函数名称不区分大小写,这点和变量名称不一样


形参就是一个变量,调用函数时,需传入一些数据,这些数据会被传值赋值给函数的形参。可以不需要传入参数,可以传入一个、也可以传入多个。


看下面演示:


1.png


上面的代码是定义了一个函数,把楠神写过的求一个数组中最小值代码放到了函数体里。


代码开始从17行执行,

第18行运行函数(调用函数),把第17行数组变量$arr当做实参传给函数。

函数开始运行,跳到第4行。第17行的$arr开始赋值给第4行的$arr,实参传值赋值给形参。所以说第17行的$arr与函数体里的$arr虽变量名相同,已不是同一个变量。

运行到第13行,$cup就是最小值,用return语句把值返给调用函数的地方

回到第18行,收到函数返回的值,再赋值给变量$min。


1.png

定义函数的代码与调用函数的代码没有先后顺序,意思是这样也可以:


1.png

函数调用形式

本质上就是使用一个名字来达到执行其中函数中的代码的作用。通常可以分两种情形的调用:


第一种:没有返回值的函数,则调用语句是独立语句,比如函数Var_dump


第二种:有返回值的函数,则调用语句,通常会“混杂”在别的语句中,并将调用语句当作一个“数据”来使用,大部分的函数都是有返回值的函数。


A: $v1 =  函数名();   //赋值给其他变量;这里省略实参语法,下同。

B: $v1 =  函数名() * 3 + 6; //参与运算,然后再赋值;

C: echo  函数名();   //直接输出

D: echo  函数名() * 3 + 6; //参与运算,然后再输出

E: $v1 = 函数名2( 函数名() , 实参2,实参3, .... ); //当作实参使用


1.png


结果:


1.png


实际上,一个变量(数据)也只有这几种场合的使用情况。


注意的地方再强调一遍:empty、isset等一些类似于函数的语言构造器,函数的返回值不能做它们的实参直接传入,需要先把函数的返回值赋值给一个变量,用变量当做它们的实参传入。


函数调用流程分析


o 开始调用:实际参数传数据给形式参数

o 程序执行流程进入到函数中(一个独立的运行空间),跟全局执行空间是隔离的

o 按常规的程序逻辑执行函数中的代码

o 如果碰到return语句,则终止函数的执行,跳回函数开始调用的位置;

o 如果执行到函数的最后位置,也同样跳回函数开始调用的位置


教大家学会看手册函数的介绍:

1.png

1.png


最左边代表的这个函数返回的数据类型,void是空的意思,说明这个函数没有返回值。float就是返回的是浮点型数据。

括号里的mixed代表这个形参可以是多种数据类型。用[]包起来,代表这个形参可有可无。


本节学习代码》》》