与其他语言类似,php函数可以传参,可以有返回值,但也有不同之处,如变量函数
目录
常规传参
<?php /* * @param number $a * @param number $b * @return number */ function add($a, $b){ return $a+$b; } echo add(10.5, 11); //21.5
引用传参
引用传参必须传变量,不能传常量。
<?php function show(&$a) { //变量前加&符号传递引用 $a = 20; } $b = 10; echo $b."<br>"; //10 show($b); echo $b."<br>"; //20
默认参数
php函数可以指定默认值,如果没有传递参数,则使用默认值,指定默认值顺序必须从右向左。
<?php function add($a, $b, $c=10){ return $a+$b+$c; } echo add(50,60)."<br>"; //120 echo add(50,60,20)."<br>"; //130
可变个参数
php函数可以使用函数 func_get_args() 获取所有参数,它返回一个数组;可以使用 func_num_args() 获取参数总数;使用函数func_num_arg(i)获取第i个参数。
<?php function add(){ //$arr = func_get_args(); //获取所有参数 $sum = 0; for($i=0;$i<func_num_args();$i++){ $sum += func_get_arg($i); } return $sum; } echo add(1,2,3,4,5); //15
变量函数
变量函数是指将函数名字存储在变量中,根据变量的值不同可以调用不同的函数,在其他语言中要想实现变量函数非常繁琐,而在php中可以直接使用变量函数。
<?php function add(){ //$arr = func_get_args(); //获取所有参数 $sum = 0; for($i=0;$i<func_num_args();$i++){ $sum += func_get_arg($i); } return $sum; } $func_name = "add"; echo $func_name(2,4,6); //12
回调函数
在函数调用时,如果参数中传的不是一个变量或一个值,而是一个函数,这就是回调函数参数。
<?php function filter_range($num, $func){ for($i=0;$i<$num;$i++){ if($func($i)) continue; echo $i."<br>"; } } function filter($i){ if($i%3==0 || $i%5==0) return true; else return false; } filter_range(10,"filter"); //1 2 4 7 8
在php中经常使用回调函数 call_user_func() 和 call_user_func_array() 来回调执行函数,它非常类似于JavaScript中的函数 call() 和 apply() 。但是JavaScript中这两个回调函数能够改变this的指向,而php的作用只是传参,和直接调用没什么区别(??),可能好处就是 call_user_func_array() 能够传递数组(还有就是调用类的静态方法)。
<?php function add($a, $b){ return $a+$b; } echo call_user_func("add", 1, 2); //3 echo call_user_func_array("add", array(1,2)); //3
递归函数
直接和间接的调用自己的函数叫做递归函数。
<?php function factorial($num) { if($num>1) { return $num * factorial($num-1); } else { return 1; } } echo factorial(5); //120
加载自定义函数库
php可以使用 include 包含自定义的php文件函数库,注意:include不是简单的copy到当前文件,对于非php文件它还有执行的功能。
<?php include "function.inc.php"; //相当于copy include "head.html"; //非php文件解析html文件并显示 include "demo.txt"; my_add(1,2); //执行function.inc.php函数
在大型设计中可能会include一个函数库多次,那么函数就会重复定义,可以用 include_once 解决重复包含的问题,但是建议使用 include ,因为include效率高。
类似的,包含其他文件还可以使用 require 和 require_once ,require和include函数几乎等价,区别在于在脚本执行时包含,当处理失败时,include产生一个警告,而require则导致一个致命的错误。因此建议包含关键性文件时使用require函数,包含非关键性文件时使用include。