zoukankan      html  css  js  c++  java
  • php函数

    1. 函数的定义

    所谓函数,就是将一些有具体功能的语句组织在了一起。定义函数的目的是为了将程序分块。方便使用,管理和阅读,调试

    函数的分类:系统定义好了的函数,用户自定义的函数

    2. 自定义函数

    ① 函数的声明

    JavaScript里面的语法是一样的:

    function   函数名(参数1,参数2,参数3…)

    {

    //函数体

    }

    ② 函数的调用

    调用函数也非常简单,直接函数名(不传/传递相应的参数)

    ③ 函数的参数

    函数的参数分为两种:实际参数(实参),形式参数(形参)

    分形参和实参,在没有传&这个的时候形参是实参的拷贝,

    如果是&实参可以改变。

    没有实际参数的变量,如写在函数名括号的变量称形参

    ④ 函数的返回值

    可以通过一个return关键字来进行返回,如果没有设置return系统默认返回null

    一个函数是否可以有多个返回值?

    函数的返回值,关键字return,但不能有多个return同时返回多个值;

    当有多个return返回值时,只会执行第一个然后停止运行;

    写在return下面的所有代码都不会执行,但是有些时候,有些程序员会故意将某些代码写在return下面,这些代码叫做花旦。

    如果我偏偏就要让一个函数返回多个值,可以通过数组的方式。

    ⑤函数的工作原理

    当我们调用一个函数的时候,事实上就是在内存里面开辟了一个新的栈区,当函数执行完之后,新开辟的栈就会被回收(释放内存)

    当我们调用函数1的时候,内存里面就开辟了一个新的栈,形参就是在这个新栈里面被申明和使用的,当函数1执行完之后,这个栈就会被释放掉,所以它对实参不会有任何影响。如果函数1里面又调用函数2,则又会在内存里面开辟一个新栈。

    栈区的特点:先进后出,后进先出       

    效率低

    3.变量的作用域

    JavaScript一样,PHP不支持块级作用域

    C语言里面,支持块级作用域

    一对花括号代表一个块级作用域

    ①局部变量

    如果没有函数,那么我们创建的变量可以在页面任何位置使用,但是一旦有了函数,就会有不同的作用域

    如下:

     

    除了外部无法访问到函数内部的变量以外,函数内部也无法访问全局变量,证明如下:

    效果:

    如果想在函数中访问一个全局变量,也不是没有办法,可以使用global关键字

    如下:

    除了上面的方法,还有一个方法,使用PHP内置的(预定义变量)超全局数组$GLOBALS[ ],全局变量的变量名就是键名,变量值就是数组的值

    全局变量:

    Define<?PHP  声明变量?>

    ②静态变量

    因为如果是在函数里面创建的变量,一旦函数结束,变量就会被销毁,证明如下:

    静态变量的特点就是由于静态变量是放在静态区里面的,所以函数结束后变量不会被销毁。申明静态变量使用关键字static

    如下:

    4. 各种形式的PHP函数

    ① 常规参数函数

    所谓常规参数函数,就是实参和形参个数相等,类型一致

     

    ② 引用参数函数

    所谓引用参数,就是将参数的地址传递给函数,这个时候,函数里面的形参和实参都是指向同一个地址,这个时候,相当于两个是被绑定在一起的,形参一改,实参也就被修改了

     

    需要注意一个地方:在C语言里面,如果传递的是一个数组,那么传递的是地址过去,但是在PHP里面传递数组仍然是传递值过去

    如下:

    如果想要传递数组的地址,仍然是形参前面加一个&就可以了,如下:

    PHP里面,有很多这样的引用传参的函数,例如:sort()函数,进行排序的函数,返回新数组,原来数组的顺序会改变

     

    ③ 默认参数函数

    所谓默认函数参数,就是可以给函数指定一个默认参数值,当我们调用函数的时候,如果传过来了实参,就用实参,如果没有,就用默认的参数值

     

    案例2

    ④ 参数个数可变函数

    所谓参数个数可变函数,就是根据函数传过来的参数个数来执行业务。有一点像JS里面的函数重载。

    func_num_args():该函数的返回值是一个整数,数组里面装的是传递过来的实参的个数

    func_get_args()函数:返回值也是一个数组,数组里面装的就是传递过来的参数的值

    ⑤ 回调函数

    所谓回调函数,就是将一个函数A作为参数传递给另外一个函数B,然后在函数B里面再执行函数A

    在学习回调函数之前,我们需要先学习变量函数

    所谓变量函数,就是将函数赋值给一个变量,然后变量名后面加上一对括号,PHP系统会自动检测是否为函数。如果是的话就会执行该函数

    接下来再来看回调函数,将函数作为参数传递到另外一个函数里面

    PHP里面,实现回调函数还有一种方法,通过系统函数call_user_func_array()

    call_user_func_array(“函数名”,装有参数的数组)

    如下:

    ⑥ 匿名函数(闭包函数)

    所谓匿名函数,就是没有名字的函数

    需要将匿名函数赋值给一个变量,这个时候直接在变量名后面加上一对括号,就可以调用这个匿名函数了

    PHP里面的匿名函数又被称之为闭包函数

    ⑦ 递归函数

    所谓递归函数,就是直接或者间接的调用自己。

    递归函数最大的好处在于精简程序中繁杂重复调用的函数。但是使用递归会大量消耗内存,所以一般不建议使用递归。

     

    练习:使用递归实现从1+100求和

     

    5. 自定义函数库

    有些时候,我们不仅仅只是使用系统提供给我们的函数,我们还会自己写一套函数。

    如果要将自己写的php函数库包含进来,我们可以使用include关键字

    Hanshuku.php代码

    Test.php代码

     

    除了include关键字以外,还有一个叫做require的关键字,也可以将自己定义的函数库包含进来

    如下:

    Requireinclude的区别:

    Require当遇到错误的时候,会直接停止脚本,include遇到错误,会给出警告,但是不会停止脚本

    如下:require会终止脚本,后面的代码不会被执行

    效果:

    Include则会只是给出警告,但是后面的代码会继续执行

     

    效果:

    Include_oncerequire_once:基本功能和上面的requireinclude功能是一样的,但是如果该文件里面的代码已经被包含了,则不会再次包含,once会判断次数只能包含一次

    如下:

  • 相关阅读:
    20155230 《Java程序设计》实验五 Java网络编程及安全
    20155230 2016-2017-2《Java程序设计》课程总结
    20155230 实验四《android程序设计》实验报告
    20155230 实验三《敏捷开发与XP实践》实验报告
    20155230 实验二《Java面向对象程序设计》实验报告
    20155230 2016-2017-2 《Java程序设计》第十周学习总结
    20155230 2016-2017-2 《Java程序设计》第九周学习总结
    20155230 2016-2017-2 《Java程序设计》第八周学习总结
    2017-2018-1 20155203 20155204 《信息安全系统设计基础》实验一:开发环境的熟悉
    2017-2018-1 20155204 《信息安全系统设计基础》第三周学习总结
  • 原文地址:https://www.cnblogs.com/chenduzizhong/p/7364256.html
Copyright © 2011-2022 走看看