在开发过程中,一些反反复复操作或处理的步骤要是都需要重新写一次代码,这显然令人头痛。而使用函数就可以将这些重复使用到的功能写在一个独立的代码块中,在需要的时候单独单独调用即可。


一、定义和调用函数
PHP函数定义的基本语法:
function fun_name($str1,  $str2,  [$str3],  [...]){
        fun_body;   //函数主体
}

调用函数的操作非常简单,只需要引用函数名并赋予正确的参数即可,如
<?php 

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


二、在函数间传递参数
        在调用函数时,需要向函数传递参数,被传入的参数被称为实参,而函数定义的参数为形参。参数传递的方式有按值传递、按引传递和默认参数3种。
1.按值传递方式:将实参的值复制到对应的形参中,在函数内部的操作针对形参进行,操作的结果不会影响到实参;
2.按引用传递方式(在原基础上加上&):将实参的内存地址传递到形参中。在函数内部的所有操作都会影响到实参的值;
3.默认参数(可选参数):可以指定某个参数为可选参数,将可选参数放在参数列表末尾,并且指定其默认值为空。
综合例子:
<?php
function example( $m ){       //定义一个函数,若按引用传参则在“$m”之前加上&即可
$m = $m * 5 + 10;
echo "在函数内:\$m = ".$m;       //输出形参的值
}
$m = 1;
example( $m ) ;                 //传值:将$m的值传递给形参$m
echo "<p>在函数外:\$m = $m <p>" ; //实参的值没有变化,若按引用传参则实参的值发生变化,为15
?>
按值传递方式的结果:
在函数内:$m = 15
在函数外:$m = 1
按引用传递方式的结果:
在函数内:$m = 15
在函数外:$m = 15
默认参数(可选参数)的例子:
<?php
function values($price,$tax=""){
   $price=$price+($price*$tax);
   echo "价格:$price<br>"; //结果:价格:125 价格:100
}
values(100,0.25);        //为可选参数赋值0.25
values(100);            //没有给可选参数赋值
?>


三、从函数中返回值
函数将返回值传递给调用者的方式是使用关键字return()。return()将函数的值返回给函数的调用者,若在全局使用则终止脚本的执行。return()只能返回一个参数,如果要返回多个结果就要在函数中定义一个数组。


四、使用变量函数调用函数
使用变量函数是通过改变变量名来实现的,在变量名后加上一对小括号,PHP将自动寻找与变量名相同的函数并执行它。如:
<?php
function come() { //定义com函数
    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();
?>
运行结果:
我来啦~~
Tom走了
Lily却又来了


五、对函数的引用
引用不仅可用于普通变量、函数参数,它还可以作用于函数本身。对函数的引用只需在函数名前加上“&”。如:
<?php
function &example($tmp=0){ //定义一个函数,别忘了加“&”符
return $tmp;   //返回参数$str

}
$str = &example("看到了"); //声明一个函数的引用$str1;
echo $str."<p>";
?>
结果:看到了

函数的引用要看到效果,需要用静态变量

//定义一个函数
function &fnTest(){
  static $b=0;
 echo $b;
 //返回$b
 return $b;
}

//这就等价于 $k = &$b;
$k = &fnTest();
echo $k;
$k=1000;//这个时候函数内部 $b = 1000

fnTest();

 


六、取消引用
当不需要引用时,可以取消引用。取消引用使用unset()函数,它只是断开了变量名和变量内容之间的绑定,而不是销毁便内容。如:
<?php
$num = 1234;//声明一个整型变量
$math = &$num; //声明一个对变量$num的引用$math
echo "\$math is: ".$math."<br>";//输出引用$math
unset($math);   //取消引用$math
echo "\$math is: ".$math."<br>";//再次输出引用
echo "\$num is: ".$num; //输出原变量
?>
运行结果:
$math is: 1234
$math is:
$num is: 1234