• PHP知识点--方法函数


    一、基本使用
    1、函数定义形式
    function 函数名 (形参1,形参2,.... )
    {
    //函数体(代码块)
    }
    函数调用流程分析
    o开始调用:实际参数传数据给形式参数
    o程序执行流程进入到函数中(一个独立的运行空间),跟全局执行空间是隔离的
    o按常规的程序逻辑执行函数中的代码
    o如果碰到return语句,则终止函数的执行,跳回函数开始调用的位置;
    o如果执行到函数的最后位置,也同样跳回函数开始调用的位置

    2、函数参数问题
    在定义时,有形式参数(形参);
    1,形参一定是一个变量名!
    2,该变量名只能是在该函数中有效的变量名;
    3,而且只在该函数调用并执行时有效,函数结束,通常这些变量也就“销毁”。
    在调用时,有实际参数(实参)。
    实参就是一个“实际数据”,
    该数据可以是一个“直接数据”(比如5,”abc”),也可以是一个变量中存储的数据。
    实参的作用是将其数据“赋值给”形参变量。
    实参跟形参之间通常应该有个“一一对应”关系:
    定义形式: function 函数名(形参1,形参2,...... ){ 。。。。}

    调用形式: 函数名(实参1,实参2,..... )
    默认值不能是对象或资源类型;
    默认值只能是常量表达式,或常量,不能是变量

    3、参数的数量问题
    1,函数的参数的数量可以是0个或多个——具体多少个,不是语法问题,而是应用问题。
    2,通常,实际参数的数量应该跟形式参是的数量一致。
    3,但是,在2的基础上,如果形式参是中有默认值,则实际参数的对应项可以省略。
    即:实参的个数,至少应该不少于形参中的非默认值参数的个数。
    但:
    我们还有一种特殊的处理函数参数的用法:自由参数数量
    定义时可以不给定形参,但调用时,却又可以给定任何个数的实参。
    在系统中,var_dump()这个函数也有同样的使用效果:
    var_dump($v1);
    var_dump($v1, $v2, $v3); //也可以
    这种应用的实现,是依赖与系统中的3个系统函数来达到的:
    func_get_args(); //获得一个函数所接收到的所有实参数据,并结果是一个数组
    func_get_arg(n); //获得一个函数所接收到的第n个实参数据(n从0开始)
    func_num_args(); //获得一个函数所接收到的所有实参数据的个数

    4、函数的返回值:
    通常情况下,函数返回的数据都是以“值传递”的形式返回:函数中的变量的值“拷贝”一份,然后返回给接收的位置的相应代码(赋值,输出,计算)。
    但:
    我们也可以让函数中的变量数据的值,以“引用传递”的方式返回:
    形式如下:
    定义函数:
    function &函数名(形参1,形参2,.....) //注意函数名前有个引用符号“&”
    {
    $result = 0; //初始化
    return $result; //此时返回数据,只能是变量
    }
    调用函数:
    $v1 = &函数名(实参1,实参2,....); //引用返回的函数,自然是指有返回值。

    二、函数的其他形式
    1可变函数
    可变函数,就是函数名“可变”——其实跟可变变量一样的道理。
    $str1 = “f1”; //只是一个字符串,内容为”f1”
    $v1 = $str1(3, 4); //形式上看起来是一个变量后面加上括号,则其本质是该变量的“内容”(f1)后面加括号,即这里是调用函数f1(3, 4);
    2匿名函数
    匿名函数就是没有名字的函数,其有两种表现形式:
    表现1:
    $f1 = function(){。。。函数体;};
    //这里的匿名函数定义形式上没有名字,但其实又将之赋值给了变量$f1
    使用时,就跟“可变函数”一样了:$v1 = $f1();
    表现形式2:
    调用其他函数2(匿名函数,实参1,实参2, ...... );
    说明:
    1此形式的匿名函数只有定义的函数体(无函数名)
    2此形式的匿名函数只能作为其他函数调用时的参数(其他函数通常有特定用处)
    3此匿名函数会在调用其他函数的“过程中”被执行。
    能够使用(匿名)函数当作实参的函数,并不多!
    其中有一个常见的是:call_user_func_array();
    其使用形式为:
    call_user_func_array(匿名函数,数组);
    含义:
    将数组的每一项当作该匿名函数的若干个实参,传递到该匿名函数中,并执行该匿名函数,并可以从该匿名函数中返回数据。

    三、变量的作用域
    局部作用域:只能在所定义的函数范围内使用。
    全局作用域:在函数的“外部”范围使用。
    ——php中,局部和全局作用域是不重叠的
    ——js中,全局作用域是包括局部作用域的
    超全局:就是在函数的内部和外部都可以使用。
    超全局变量只有系统内部预定义的那几个,我们不能再程序中创建超全局变量。
    静态局部作用域:其实也是局部,但多一个特征:数据能够在函数退出后仍然保持不丢失。

    局部访问全局变量的特定语法
    1,在局部范围内,使用global关键字对全局变量进行一次“声明”,则就可以使用了:
    语法:global $变量名;
    2,在函数中(局部范围),使用$GLOBALS超全局数组来引用(使用)全局变量:
    $GLOBALS超全局数组的作用是用于存储所有全局变量的数据:变量名为下标,变量值为对应元素值。
    但通过 $GLOBALS操作全局变量,是直接操作(而不是引用操作),即如果unset该对应元素,则全局变量对应变量也被unset:
    3,实际上,我们还可以在函数内部直接使用$GLOBALS数组,添加元素的方式来创建全局变量,自然也就类似局部使用全局:

    全局访问局部变量的特定语句
    通过引用传递的方式向形参传递一个引用实参变量
    o$v1 = 10;
    ofunction f1( &$p1, $p2){ ...... } //$p1是函数的形参,也即就是函数的内部(局部)变量
    o$v2 = f1( $v1, 10); //此时我们认为$v1就可以使用函数中$p1的值。
    使用函数的引用返回形式:见前面引用传递的方式返回数据
    函数中使用global关键字来首次引用一个全局变量,则函数结束后在全局范围就可以使用该变量了

    有关函数的系统函数:
    function_exists():判断某个函数是否被定义过,返回布尔值
    oif( function_exists(“ func1 “) == false ){
    function func1(){。。。。。。};//定义函数
    o}
    func_get_arg(n):获得一个函数的第n个实参值(n从0开始)
    func_get_args():获得一个函数的所有实参,结果是一个数组
    func_num_args():获得一个函数的所有实参的个数。

    四、有关函数的编程思想
    递归思想(递归函数)
    递推思想(迭代思想)

  • 相关阅读:
    Vue源码探究-数据绑定的实现
    vue 数组遍历方法forEach和map的原理解析和实际应用
    vue 微信内H5调起支付
    uni-app官方教程学习手记
    vue-cli3 搭建的前端项目基础模板
    vue.js响应式原理解析与实现
    vue-waterfall2 基于Vue.js 瀑布流组件
    解决lucene更新删除无效的问题
    spring项目启动报错
    js监听页面copy事件添加版权信息
  • 原文地址:https://www.cnblogs.com/1301694f/p/8366749.html
Copyright © 2020-2023  润新知