php中的函数
函数,由于php是弱类型的语言,这不但使得php变量与众不同,同时也使得php函数也变得与众不同。
在php中函数的声明方式很简单:如下
function fcuntion_name([参数列表])
{
}
函数可以分为这么几类:
(1).常规参数函数,就是参数中规中矩。在函数该变参数的值,对原变量无影响。
(2).引用参数的函数,即传入的参数是某个参数的引用,在函数中改变参数的值,对原变量的值有影响。但是用unset()函数注销函数中的引用变量
只是注销了函数中的对应的变量不会注销原变量。如下:
$t=2;
function test(&$m)
{
$m=5
unset($m)
}
test($t);
echo $t; //输出5,即改变引用参数的值会改变原变量的值,但是在函数中注销引用参数,只是注销了引用参数指向原变量地址,而不是注销了原变量。
(3).默认参数函数,即在函数定义时,就对一些参数进行赋值,默认参数从右向左排列。如
function user( $name ,$pwd=123 ,$stu_no='20132577' )
{
}
在调用时,要是没有对已经有默认值的参数赋值,则使用该参数的默认值。要是在调用时对默认参数赋值了,则覆盖原来的默认值。
(4).可变参数个数的函数,即函数的参数在定义时是不定的,在调用函数时,才可以确定参数个数。
这样的函数需要,使用php系统自带的函数 func_get_args()获得调用函数时,包含输入的所有参数的数组。
或者通过func_num_args()获得调用函数时,输入参数的个数。和配合func_get_arg($index)获得指定位置的输入参数。
定义方式如下:
function test()
{
$args=func_get_args(); //一次性获得包含所有的输入参数的数组,
for($i=0;$i<$count($args);$i++)
{
......
}
}
或者是通过指定位置,获得相应的参数。
function test()
{
$length=func_num_args(); //获得输入参数的个数,
for($i=0;$i<$length);$i++)
{
$arg=func_get_arg($i);//根据参数索引获得参数值。
}
}
(5).变量函数,变量函数其实和可变变量是一样的原理。
如:定义一个函数 test()
function test()
{
}
$t='test';//我们可以称他为变量函数,该变量的值是一个函数名的字符串。$t();//调用函数test()
(6).回调函数,回调函数就是使用变量函数作为参数,实现函数功能的扩展。
如定义一个user函数和一个identiyt函数如:
function identiyt()
{
}
function user($function_variable)
{
$function_variable();//user函数回调函数名为$function_variable的函数。
}
$function_variable='identiyt';
user($function_variable);//回调identity函数。
一般我们还可以通过系统函数 call_user_func_array([变量函数],[参数数组])自定义回调函数
function t()
{
echo"t function <be />";
}
function y($fun)
{
call_user_func_array($fun,array());
//echo"y function <br />";
}
y('t');
以上使用call_user_func_array()函数,只是调用了全局函数,并不能调用类中的函数,类中静态函数。那类中定义的函数和静态函数如何调用呢?
类中的函数:以上使用call_user_func_array( array(new class(),function_name) ,array([参数]))
类中的静态函数: 类中的函数:以上使用call_user_func_array(array(class,function_name),array([参数]))
(7)匿名函数,也叫做闭包函数,与js中的匿名函数是一样的。
$t=function (){};//将匿名函数赋值给一个变量$t
$t();//调用匿名函数。
(8)闭包
闭包可以从父作用域中继承变量。任何此类变量都应该用 use 语言结构传递进去。怎么理解呢? 因为我们知道在函数中定义的变量是局部变量,那么在函数中再定义一个闭包函数(匿名函数),这个闭包函数是无法是直接从他的父函数中继承变量的,因为闭包函数有无法像父函数那样通过global获取全局变量那样来从父函数中获得在父函数中定义的变量,所以闭包函数需要一种新的继承方式,这种方式叫做闭包。关键字为use
例如:
function add1()
{
$a=10;
$b=20;
$callback=function() use($a,$b)//通过use 继承父函数中的两个变量,要是不仅想获得变量的值,还想改父函数的变量,
{ //通过继承变量的引用如 use(&$a,&$b)
echo $a+$b;
};
$callback();
}
add1();
闭包有一个好处,就是通过继承父函数中变量的引用,可以减少循环次数。