函数

函数

基本知识:

函数:

    概念就是完成完成某一功能的代码段。从代码结构上看就是使用{}将一段功能性的代码括起来,并使用function关键为这段代码起一个名子,就是封装。在名子后加'()',此函数的作用指示此名子,只能调用。

    函数是模块化编程思想的产生。在函数的基础上再进行封装就是面向对象的编程思想。

函数的作用:

    减少代码冗余,达到一次定义多次调用。

示例:

函数的组成元素

函数名、形参、实参

函数的定义:

function funName(形参列表){

    //函数体

    【return 值】;

}

说明:

    funName就是一个函数名(标识符),命令规则,只能包含字母、数字、下划线,不能以数字开头。

    命名方式,小驼峰,如果函数名,由多个单词组成,除第一个单外,以后的每个单字母大写,三个单词以上使用缩写。

函数的调用:

funName(实参列表);

函数的参数

与函数相关的参数有形参、实参

形参:

    函数定义时的参数就称之为形参

作用:

    用于向函数内部传递数据。

    形参可以让函数更改具有通用性。

特点:

    形参就是一个变量,只在函数内部有效,对函数外部不可见

实参:

    函数调用时的参数称之为实参,实参可以变量,可以是字面值。
作用:

    用于从函数外部向函数内部传递数据

形参与实参的区别:

    实参是主动向函数内部数据,形参是被接收数据

示例:

形参的默认值

php中函数的形参可以赋值,赋的值就是形参的默认值

当函数调用时没有为形参传递数据,那么函数内部使用形参的默认值

当函数调用时有没形参传递数据,那么函数内部使用实参的数据。

形参可让函数更加具有通用性。

具有默认值的形参的使用,一般习惯上将具有默认值的形参放在形参列表最后。

php中实参的个数,不能少于不具有默认值的形参的个数。

实参的个数比形参的个数多,那么多个实参会被忽略。

形参与实参内存分析

源代码:

<?php

    showInfo('hello phper');

    function showInfo($mes){

        echo $mes;

    }    

    $v1 = 'php15';

    showInfo($v1);

?>

   

执行过程:

1、编译,加载源代码,词法检查,语法检查(可执行机器代码)

2、执行函数的调用,检查看内存中有没函数存在,存在。

2.1、开启执行函数,查看是否形参,有没有?没有默认,找实参(字面值)

2.2、在栈区再开辟一个专属于当前函数的内存空间

2.3、在函数专属的空间内,开启一个空间用于$mes变量名

2.4、执行ehco $mes,在函数专属空间内使用$mes变量存储的内存地址到,数据段的全局区找到相应当,并输出到缓存区。

2.5、第一次调用结束时,位于栈区的专用于第一次调用时开辟的内存空间的数据,会全部清空。

3、执行$v1 = 'php15';

3.1、直接在栈区开辟一个空间用于存储$v1

3.2、在数据段的全局区开辟一个空间用于存储'php15';

3.3、将存储php15物理地址,传给$v1

4、执行函数第2次调用showInfo($v1)

4.1、检查函数是否有形参,有形参且,调用时也传递了实参$v1

4.2、在栈区再开辟一个专属于当前函数的内存空间

4.3、在函数专属的空间内,开启一个空间用于存储$mes变量

4.4、实参与形参传递默认是值的传递,相当于$mess = $v1,将$v1存储的地址指向的数据,存储,$mess存储的地址指向的空间。

4.5、将全局区为$mess变量开辟的存储数据的空间的地址传递给栈区中的$mess变量

4.6、执行ehco $mes,在函数专属空间内使用$mes变量存储的内存地址到,数据段的全局区找到相应当,并输出到缓存区。

4.7、第一次调用结束时,位于栈区的专用于第一次调用时开辟的内存空间的数据,会全部清空。

5、脚本执行结束栈区,与代码段清空,数据段中没有被指向的数据全部被操作系统 回收。

图解:

函数的返回值

    函数用于完成一功能,在完成功能的同时在函数内部会产生数据,数据可能会在函数执行结束后,被其后的代码所使用。由于函数在执行结束后,所有的数据都被清空(函数内部无法保存数据),需要将函数产生的数据返回给函数的调用处

语法:

    return 值;

说明:

    return并不是必须的,是根据需求而定。

    一个函数内可以有多个return,当函数在执行时,遇到任何一个return都会直接结束函数体。

   

示例1:

示例2:

函数体:

完成某一功能的代码段。

 

匿名函数

    匿名函数,就是没有名子函数(JS)

可变函数

一个变量的值是另一个函数的名,那么就可以在变量名后使用'()'来调用,与变量值同名的函数。

原文地址:https://www.cnblogs.com/nyxd/p/5356057.html