编程之路之php函数详解【文末有福利】

一、什么是函数?

函数就是具有特定功能的固定的代码段。PHP本身已经封装好了很多这种内置函数。

我们也可以自定义函数。

二、定义函数

使用function关键字来定义函数

编程之路之php函数详解【文末有福利】

举一个例子

编程之路之php函数详解【文末有福利】

三、调用函数

通过   函数名(函数的实参列表) 格式去调用函数

同样实参有多个时,中间用逗号分开

编程之路之php函数详解【文末有福利】

四、函数名的命名方法

函数名的命名规则和变量名是一样的。用下划线或字母开头,后面跟下划线、字母、数字。

注意:函数名是不区分大小写的。定义和调用时都不用管大小写的问题。

函数名的命名方法:强烈推荐使用大小驼峰法

函数不允许重复定义

 

函数调用,通常情况下应该先定义后使用

但是,如果是一个脚本程序的情况下,可以先使用后定义

编程之路之php函数详解【文末有福利】

原因:PHP核心引擎程序它在解释PHP脚本程序时,会先将函数字义预处理

所以感觉先使用后定义是没问题的。

可是如果函数定义是在包含文件中,则必须先定义后使用

 

不能自定义一个和内置函数相同名称的函数

 

五、函数的参数

函数的参数分为:形参和实参

1、形参,paramter,形式参数

形式参数用于表明函数需要几个数据。

从函数定义上,不能看出形参是什么类型,这是和PHP是弱类型语言有关。

所以在PHP,经常会遇到看了一个自定义,但是不清楚,形参应该是传递给它什么样的数据。

提示:

在自定义函数时,应该养成写函数注释的习惯。

编程之路之php函数详解【文末有福利】

形参的默认值

在定义函数时,可以为形参指定一个值作为默认值。当函数调用没有此参数时,此形参使用默认值。

编程之路之php函数详解【文末有福利】

调用时,未使用第二个参数

编程之路之php函数详解【文末有福利】

如果函数的形参都有默认值,则调用时,可以一个实参都不给出。

思考:如果有默认值的形参是在左边,默认值有用吗?

编程之路之php函数详解【文末有福利】

这种情况,默认值是使用不到的。

结论:要把有默认值的形参,放在后面。

注意:

形参的默认值只能是确定的值或常量,不能是变量!

2、实参,argument,实际参数

实参必须是有值的数据。(包括有值的变量,或者具体的值)

值传递

正常情况下,函数调用时,传递的都是值的拷贝。就是把实参的值赋给相应的形参。

说明在函数中如果形参的值发生了变化,实参不会受影响。

引用传递

  1. 需要在定义函数时,在函数的形参前加&符号
  2. 调用时,正常调用就可以,不用特意加上&

引用传递时,形参是实参的一个引用,在函数中改变形参的值,实参值也会改变!

旧的引用传递的方式

  1. 定义函数时,正常的写,不用加引用符号
  2. 在调用函数时,在实参前加引用符号

编程之路之php函数详解【文末有福利】

这个旧语法报错是因为在php.ini里已经配置成默认不支持了

可以修改配置

编程之路之php函数详解【文末有福利】

然后就不会报错了。但是不建议使用这种过时的语法方式了

3、参数的数量

  1. 正常情况时,实参的数量需要和形参数量一致。
  2. 如果部分形参有默认值,则实参数量可以少于形参数量。如果所有的形参都有默认值,则实参可以一个都不传递。
  3. 如果实参数量多于形参数量,会忽略掉多出来的实参。

编程之路之php函数详解【文末有福利】

不定参数数量函数

Var_dump($a, $b, $c, $d)这种函数可称为不定参数数量函数

如何定义我们自己的可变参数数量函数?

需要使用系统内置函数:func_get_args()

编程之路之php函数详解【文末有福利】

具体实现功能

编程之路之php函数详解【文末有福利】

Func_get_args() 可以获取所有传递的实参数据

Func_get_arg(index) 可以获取某一个下标的参数值

Func_num_args() 可以得到传递的参数的数量

编程之路之php函数详解【文末有福利】

六、函数体

就是完成特定功能的代码。

七、函数的返回值

当我们知道函数的执行结果的时候,可以使用return把结果返回给调用者。

  1. 当函数代码执行到return语句时,将结束函数的运行,它后面的代码不会被执行
  2. 函数中return不一定要放在最后,可以通过条件在不同的地方返回

编程之路之php函数详解【文末有福利】

思考:如果不写return或return后面没有数据时,返回什么?

编程之路之php函数详解【文末有福利】

返回null

返回引用

除了返回值以外,还可以返回引用

定义函数时,要在函数名前加引用符号&

注意:返回引用方式下,不能返回确定的值的引用,必须以变量的方式返回引用

编程之路之php函数详解【文末有福利】

八、变量和函数的作用域

我们在脚本程序中的变量是全局变量,在函数中的变量是局部变量,它们的作用域不同。

想在函数中直接使用全局变量是访问不到的。

有两种方法可以让我们在函数的作用域中访问到全局变量

  1. 使用global关键字

编程之路之php函数详解【文末有福利】

Global是怎么做到的?

相当于给全局变量新建了一个引用

编程之路之php函数详解【文末有福利】

在函数内删除掉引用变量,不会影响原全局变量

  1. 使用$GLOBALS在函数内引用全局变量

$GLOBALS可以引用到全局范围可见的所有变量

使用格式:$GLOBALS[‘变量名’]可以在函数中调用到全局变量

编程之路之php函数详解【文末有福利】

在函数中,可以使用给$GLOBALS[‘变量名’]赋值改变全局变量的值

如果我们删除呢?就会把全局变量删除掉!

从安全角度说,global关键字只能修改全局变量的值,不能删除掉全局变量。

$GLOBALS预定义变量方式,则既可以修改也可以删除掉全局变量。

  1. 在全局访问到局部的变量

Function aaa(&$m)

只能通过引用传递的方式向形参传递引用变量

这种方式和使用global关键字很类型

九、可变函数

名称可变的函数,称为可变函数。

编程之路之php函数详解【文末有福利】

使用一个变量作为调用函数时的名称

编程之路之php函数详解【文末有福利】

实际应用的例子:当用gd函数处理图像时,根据不同的配置,调用不同的函数

编程之路之php函数详解【文末有福利】

十、匿名函数

在PHP5.3以后,开始支持匿名函数的功能。

匿名函数就是没有名字的函数,又叫做闭包函数。

1、定义匿名函数

定义的匿名函数一般会保存到一个变量中。

编程之路之php函数详解【文末有福利】

2、调用函数函数

使用保存匿名函数的变量后面加()来访问

编程之路之php函数详解【文末有福利】

我们查看保存匿名函数的变量的值及类型

编程之路之php函数详解【文末有福利】

看到匿名函数是通过PHP的一个叫闭包类来实例出一个对象实现的

匿名函数也可以有形参,可以接收实参传递的数据

编程之路之php函数详解【文末有福利】

匿名函数的形参也可以接收引用传递的数据

编程之路之php函数详解【文末有福利】

3、Use语法

我们见过更多的是,在函数中去定义一个匿名函数。

函数中的匿名函数,如果接收函数的一个局部变量传递给它时,形成了闭包。

编程之路之php函数详解【文末有福利】

函数中的静态变量:它的作用域还是局部,只是它的生命周期由函数周期变成了脚本周期。

如果多次调用函数,会共用同一个静态变量

 

函数中定义的匿名函数,使用函数的局部变量通常是采用use语法

编程之路之php函数详解【文末有福利】

除了值传递方式接收参数外,还可以接收引用的参数

匿名函数两大特征

  1. 通常是在函数中定义,形成闭包
  2. 经常作为其它函数的回调函数来使用

4、匿名函数经常作为回调函数使用

编程之路之php函数详解【文末有福利】

如果array_map()它的第一个参数就是要求一个回调函数(callback, callable)

十一、递归函数

第一个特点:在函数中有调用自己的语句。这样就形成了递归调用。

第二个特点:在函数中必须有终止条件,递归出口。

十二、函数的静态变量

在函数中,普通的变量都是局部的,它的生命周期是函数周期。

有一种特殊的函数中的变量叫静态变量,它的生命周期是从函数第一次被调用开始一直到脚本程序执行结束。

在函数定义一个静态变量,使用static关键字

编程之路之php函数详解【文末有福利】

编程之路之php函数详解【文末有福利】

总结:函数的静态变量,在函数消失后,它不会消失,它的值也会保留。当下一次函数被调用时,使用其当前的值。  静态变量在此函数多次调用时,是共享的!

静态变量只初始化一次。

静态变量同样是局部变量,在全局是访问不到它的。

十三、迭代函数

递归的思路是把大问题转成小问题。

迭代是通过循环结构来解决问题。实际上由小求解出大问题。

我们可以用斐波那契数列的例子来对比

编程之路之php函数详解【文末有福利】

我们用迭代的方式来实现

编程之路之php函数详解【文末有福利】

相比较,肯定是迭代的效率高。

结论:如果能够使用迭代实现,就不要用递归。

补充知识:关于函数在结构中或函数中定义的情况

函数是可以定义在任何位置的,如在分支结构中,在函数中

函数的定义:不能重复定义

比如在函数中定义的函数,在外部的函数未被调用过时,里面的函数系统是不知道的,

编程之路之php函数详解【文末有福利】

我是小咖

发个邀请:
如果你正好想学习php,可以与我一起交流,我的VX:feilueze333。下面资料免费赠送。

编程之路之php函数详解【文末有福利】