PHP从入门到精通(第4版)(软件开发视频大讲堂)
上QQ阅读APP看书,第一时间看更新

3.8 PHP函数

在开发过程中,经常要重复某种操作或处理,如数据查询、字符操作等,如果每个模块的操作都要重新输入一次代码,不仅令程序员头痛不已,而且对于代码的后期维护及运行效果也有着较大的影响,使用PHP函数即可让这些问题迎刃而解,下面即介绍这些知识。

3.8.1 定义和调用函数

视频讲解:光盘\TM\lx\3\23 定义和调用函数.mp4

函数,就是将一些重复使用到的功能写在一个独立的代码块中,在需要时单独调用。创建函数的基本语法格式为:

        function fun_name($str1, $str2…$strn){
            fun_body;
        }

其中,function为声明自定义函数时必须使用到的关键字;fun_name为自定义函数的名称;$str1,$str2…$strn为函数的参数;fun_body为自定义函数的主体,是功能实现部分。

当函数被定义好后,所要做的就是调用这个函数。调用函数的操作十分简单,只需要引用函数名并赋予正确的参数即可完成函数的调用。

【例3.24】在本例中定义了一个函数example(),计算传入的参数的平方,然后连同表达式和结果全部输出。实例代码如下:(实例位置:光盘\TM\sl\3\24)

        <?php
            /*声明自定义函数*/
            function example($num){
                echo"$num*$num=".$num*$num;       //输出计算后的结果
            }
            example(10);                            //调用函数
        ?>

结果为:10 * 10 = 100

3.8.2 在函数间传递参数

视频讲解:光盘\TM\lx\3\24 在函数间传递参数.mp4

在调用函数时,需要向函数传递参数,被传入的参数称为实参,而函数定义的参数为形参。参数传递的方式有按值传递、按引用传递和默认参数3种。

1.按值传递方式

将实参的值复制到对应的形参中,在函数内部的操作针对形参进行,操作的结果不会影响到实参,即函数返回后,实参的值不会改变。

【例3.25】本例首先定义一个函数example(),功能是将传入的参数值做一些运算后再输出。接着在函数外部定义一个变量$m,也就是要传进来的参数。最后调用函数example($m),输出函数的返回值$m和变量$m的值。实例代码如下:(实例位置:光盘\TM\sl\3\25)

        <?php
            function example($m){              //定义一个函数
              $m = $m * 5 + 10;
            echo"在函数内:\$m=".$m;           //输出形参的值
            }
            $m = 1;
            example($m);                       //传递值,将$m的值传递给形参$m
            echo"<p>在函数外 \$m=$m<p>";       //实参的值没有发生变化,输出m=1
        ?>

运行结果如图3.14所示。

图3.14 按值传递方式

2.按引用传递方式

按引用传递就是将实参的内存地址传递到形参中。这时,在函数内部的所有操作都会影响到实参的值,返回后,实参的值会发生变化。引用传递方式就是传值时在原基础上加&即可。

【例3.26】仍然使用例3.25中的代码,唯一不同的地方就是多了一个&。实例代码如下:(实例位置:光盘\TM\sl\3\26)

        <?php
            function example(&$m){         //定义一个函数,同时传递参数$m的变量
            $m = $m * 5 + 10;
            echo"在函数内:\$m=".$m;       //输出形参的值
          }
          $m = 1;
          example($m);                     //传递值:将$m的值传递给形参$m
          echo"<p>在函数外:\$m=$m<p>";    //实参的值发生变化,输出m=15
      ?>

运行结果如图3.15所示。

图3.15 按引用传递方式

3.默认参数(可选参数)方式

还有一种设置参数的方式,即可选参数。可以指定某个参数为可选参数,将可选参数放在参数列表末尾,并且给它指定一个默认值。

【例3.27】本例使用可选参数实现一个简单的价格计算功能,设置自定义函数values()的参数$tax为可选参数,其默认值为空。第一次调用该函数,并且给参数$tax赋值0.25,输出价格;第二次调用该函数,不给参数$tax赋值,输出价格。实例代码如下:(实例位置:光盘\TM\sl\3\27)

        <?php
            function values($price, $tax=0){    //定义一个函数,其中的一个参数初始值为0
                $price=$price+($price*$tax);   //声明一个变量$price,等于两个参数的运算结果
                echo"价格:$price<br>";         //输出价格
            }
            values(100,0.25);                   //为可选参数赋值0.25
            values(100);                        //没有给可选参数赋值
        ?>

结果为:价格:125

价格:100

注意

当使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。

说明

从PHP 5开始,默认值也可以通过引用传递。

3.8.3 从函数中返回值

视频讲解:光盘\TM\lx\3\25 从函数中返回值.mp4

在3.8.1节中介绍了如何定义和调用一个函数,并且讲解了如何在函数间传递值,本节将讲解函数的返回值。通常,函数将返回值传递给调用者的方式是使用关键字return。

return将函数的值返回给函数的调用者,即将程序控制权返回到调用者的作用域。如果在全局作用域内使用return关键字,那么将终止脚本的执行。

【例3.28】本例使用return关键字返回一个操作数。先定义函数values(),函数的作用是输入物品的单价、重量,然后计算总金额,最后输出商品的价格。实例代码如下:(实例位置:光盘\TM\sl\3\28)

        <?php
            function values($price, $weight=0.45){    //定义一个函数,函数中的一个参数有默认值
                $price=$price+($price*$weight);      //计算物品金额
                return$price;                         //返回金额
            }
            echo values(100);                         //调用函数
        ?>

结果为:145

return语句只能返回一个参数,也即只能返回一个值,不能一次返回多个值。如果要返回多个结果,就要在函数中定义一个数组,将返回值存储在数组中返回。

3.8.4 变量函数

视频讲解:光盘\TM\lx\3\26 变量函数.mp4

PHP支持变量函数。下面通过一个实例来介绍变量函数的具体应用。

【例3.29】本例首先定义3个函数,接着声明一个变量,通过变量来访问不同的函数。实例代码如下:(实例位置:光盘\TM\sl\3\29)

        <?php
            function come(){                     //定义come()函数
              echo "来了<p>";
            }
            function go($name="jack"){           //定义go()函数
              echo $name."走了<p>";
            }
            function back($string)               //定义back()函数
            {
              echo "又回来了,$string<p>";
            }
            $func="come";                        //声明一个变量,将变量赋值为come
          $func();                               //使用变量函数来调用函数come()
          $func="go";                            //重新给变量赋值
          $func("Tom");                          //使用变量函数来调用函数go()
          $func="back";                          //重新给变量赋值
          $func("Lily");                         //使用变量函数来调用函数back()
      ?>

运行结果如图3.16所示。

图3.16 变量函数

可以看到,函数的调用是通过改变变量名来实现的,通过在变量名后面加上一对小括号,PHP将自动寻找与变量名相同的函数,并且执行它。如果找不到对应的函数,系统将会报错。这个技术可以用于实现回调函数和函数表等。