PHP核心语法:函数

作者: kangyiii | 来源:发表于2017-02-04 22:22 被阅读0次

    定义形式

    function 函数名(形参1,形参2,···){
      //函数体
    }
    

    调用形式

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

    1. 第一种:没有返回值的函数,则调用语句是独立语句:
    函数名(形参1,形参2,···);
    
    1. 第二种:有返回值的函数,则调用语句通常会"混杂"在别的语句中,并将要调用的语句当做一个"数据"来使用。
    $value1 = 函数名();
    $value2 = 函数名()*3+6;//参与运算后再赋值
    echo 函数名();
    $valuse3 = 函数名2(函数名(),实参1,实参2,···);函数当做实参来使用
    

    函数参数问题

    形参实参

    一个函数,在定义函数时叫做形参,只有在该函数调用并执行时有效,函数结束,通常这些变量也将会"销毁"。在调用函数时传的参数叫实参。

    函数默认值
    //设置形参并设置形参默认值,如果不传带默认值的参数,就取默认值运算
    function getArea($r,$PI = 3.14){
                $result = $PI * $r * $r;
                return $result;
    }
    $a1 = getArea(1,3.1415926);
    //调用函数,并省略带默认值的参数
    $a2 = getArea(1);
    echo "a1 = $a1,a2 = $a2";
    

    要注意,默认值不能对象或资源类型,只能是常量表达式或常量,不能是变量。
    即:正确写法function f1($v1=3)或function f1($v1 = __LINE__) 错误写法function f1($v1=3+1)或$m=3;function f1($v1 = $m)

    参数传值问题

    实际上,函数的参数传值问题,跟变量之间的传值问题,是一样的规则(模式):默认都是值传递。如果实参本身就是''直接数据",则不存在传值问题,而是简单的"赋值"。

    函数不传值情况

    我们也可以让某个参数(形参)以引用传递的方式传值:引用传递形参,在函数内部改变其值,在函数面的实参也会相应改变,类似于C函数中的指针参数。

    引用传递

    注意:只有变量才能引用传递,否则报错。

    参数的数量问题

    通常实参的数量应该跟形参的数量相同,实参跟形参之间是一一对应的。但如果形参设置默认值,则可省略该实参。但php有一种特殊情况:可以有不定形参个数的函数。

    func_get_args():获得一个函数所接收到的所有实参,结果是一个数组。
    func_get_args(n):获得一个函数所接收到的第n个参数(n从0开始)。
    func_num_args():获得一个函数所接收到的所有实参数据的个数

    function getSum(){
        $arr = func_get_args();//获得所有实参,结果是数组
        $sum = 0;
        foreach ($arr as $key ) {
            $sum += $key;
        }
        return $sum;
    }
        $he1 = getSum(1,2);
        $he2 = getSum(2,3,2,3);
        $he3 = getSum(1,2,5,7);
        echo "<br />$he1  $he2   $he3 ";
    //结果: 3 10 15 
            
    

    函数返回值

    一个函数中,使用return语句,其后带有个数据则该函数就会返回调用函数的位置。函数返回值通常都为"值传递"形式,但也可以让变量数据的值,以"引用传递"的方式返回。

    //定义函数时
    function &func1(){
      static $result = 0;  //static修饰后这句话只会运行一次
      return $result;
    }
    //调用函数
    $v1 = &func1();
    $v1++;
    $v2 =&func1();
    //$v2结果为1
    

    函数的其他形式

    可变函数

    可变函数,就是函数名"可变",其实跟可变变量一样。
    实际应用中,常常是需要根据"用户给定"的数据,来决定调用哪个函数。例如

    function f1($a,$b){···}
    $str1 = "f1";
    $v1 = $str(3,4);//调用函数f1(3,4)
    //实际应用中,常常需要根据"用户给定"的数据,来决定调用哪个函数
    function jpg(){处理jpg};
    function png(){处理png};
    function gif(){处理gif};
    $fileName = get_fileName(){获取用户上传的图片名};
    $houzhui = get_houzhui($fileName);
    $houzhui();
    
    匿名函数

    匿名函数即没有名字的函数,两种表现形式:

    1. 表现形式1:$f1 = function(){···};:这里的匿名函数定义形式上没有名字,使用时跟可变函数一样:$v1=$f1();
    2. 变现形式2:

    调用其他函数(匿名函数,实参1,实参2,····);
    说明:
    1.此形式匿名函数只是定义的函数体(无函数名)
    2.此形式匿名函数只能作为其它函数调用时参数
    3.此形式匿名函数会在调用其它函数的"过程中"被执行
    能够使用(匿名)函数当做实参的参数,并不多,较常见的是:call_user_func_array()

    $a1 = array(1,2,3,4,5,6,6);
    
    $s = call_user_func_array(
    function(){
        $a = func_get_args();
        $sum = 0;
        foreach ($a as $v) {
            echo "<br/>参数:$v";
            $sum += $v;
        }
        return $sum;
    }, $a1);
    echo "<br/>和为:$s";
    

    变量的作用域

    局部作用域:只能在所定义的函数范围内使用。
    全局作用域:在函数的"外部"范围使用。
    超全局作用域:在程序中都能使用。
    静态局部作用域:生命周期与程序生命周期相同。

    局部使用全局变量的语法,值为引用传递:

    方法1:globalunset()

    局部使用全局变量
    方法2:使用$GLOBALS超全局数组来引用全局变量,引用传递。
    使用$GLOBALS
    全局变量使用局部变量的语法,值为引用传递:
    1. 通过引用传递的方式向形参传递一个引用实参变量
    2. 使用函数的引用返回形式
    3. 函数中使用global关键字来首次引用一个全局变量,则函数结束后在全局范围就可以使用该变量了。

    有关函数的系统函数

    function_exists():判断某个函数是否被定义过,返回布尔值
    func_get_args():获得一个函数所接收到的所有实参,结果是一个数组。
    func_get_args(n):获得一个函数所接收到的第n个参数(n从0开始)。
    func_num_args():获得一个函数所接收到的所有实参数据的个数

    相关文章

      网友评论

        本文标题:PHP核心语法:函数

        本文链接:https://www.haomeiwen.com/subject/fkzgbttx.html