8、函数的参数问题、参数传值、return返回值、可变函数和匿名函数



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


函数参数问题
在定义时,有形式参数(形参);
1,形参一定是一个变量名!
2,该变量名只能是在该函数中有效的变量名;
3,而且只在该函数调用并执行时有效,函数结束,通常这些变量也就“销毁”。
在调用时,有实际参数(实参)。
实参就是一个“实际数据”,
该数据可以是一个“直接数据”(比如5,”abc”),也可以是一个变量中存储的数据。
实参的作用是将其数据“赋值给”形参变量。
实参跟形参之间通常应该有个“一一对应”关系:
定义形式:   function  函数名(形参1,形参2,...... ){ 。。。。}
调用形式:  函数名(实参1,实参2,..... )


默认值参数
定义一个函数的时候,在形式参数的位置,可以给形式参数设定“默认值”,此时就可以称为默认值参数。
注意:默认值不能是对象或资源类型;
默认值只能是常量表达式,或常量,不能是变量

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

我们也可以让某个参数(形参)以引用传递的方式来传值:
引用传递的形参(实参),在函数内部改变其值,在函数外面的实参,也会相应修改
注意:如果某个形参设定为引用传递,此时,实参只能使用变量,否则出现语法错误


参数的数量问题
1,函数的参数的数量可以是0个或多个——具体多少个,不是语法问题,而是应用问题。
2,通常,实际参数的数量应该跟形式参是的数量一致。
3,但是,在2的基础上,如果形式参是中有默认值,则实际参数的对应项可以省略。
即:实参的个数,至少应该不少于形参中的非默认值参数的个数。

但:
我们还有一种特殊的处理函数参数的用法:自由参数数量
定义时可以不给定形参,但调用时,却又可以给定任何个数的实参。
在系统中,var_dump()这个函数也有同样的使用效果:
var_dump($v1);
var_dump($v1, $v2, $v3); //也可以
这种应用的实现,是依赖与系统中的3个系统函数来达到的:
func_get_args(); //获得一个函数所接收到的所有实参数据,并结果是一个数组
func_get_arg(n); //获得一个函数所接收到的第n歌实参数据(n从0开始)
func_num_args(); //获得一个函数所接收到的所有实参数据的个数


函数的返回值return
通常来说,一个函数中,使用return语句,并其后带一个数据(直接数据,变量数据,表达式结果数据)
则该函数就会返回该数据到“调用的位置”
通常情况下,函数返回的数据都是以“值传递”的形式返回:函数中的变量的值“拷贝”一份,然后返回给接收的位置的相应代码(赋值,输出,计算)。
但:
我们也可以让函数中的变量数据的值,以“引用传递”的方式返回:
形式如下:
定义函数: 
function  &函数名(形参1,形参2,.....) //注意函数名前有个引用符号“&”
{
$result = 0; //初始化
。。。。。。。
return $result;  //此时返回数据,只能是变量
}


函数的其他形式
1、可变函数
可变函数,就是函数名“可变”——其实跟可变变量一样的道理。
$str1 = “f1”; //只是一个字符串,内容为”f1”
$v1 = $str1(3, 4); //形式上看起来是一个变量后面加上括号,则其本质是该变量的“内容”(f1)后面加括号,即这里是调用函数f1(3, 4);

2、匿名函数
匿名函数就是没有名字的函数,其有两种表现形式:
表现1:
$f1 =  function(){。。。函数体;};
//这里的匿名函数定义形式上没有名字,但其实又将之赋值给了变量$f1
使用时,就跟“可变函数”一样了:$v1 = $f1();

表现形式2:
调用其他函数2(匿名函数,实参1,实参2, ...... );
说明:
1、此形式的匿名函数只有定义的函数体(无函数名)
2、此形式的匿名函数只能作为其他函数调用时的参数(其他函数通常有特定用处)
3、此匿名函数会在调用其他函数的“过程中”被执行。
能够使用(匿名)函数当作实参的函数,并不多!
其中有一个常见的是:call_user_func_array();
其使用形式为:
call_user_func_array(匿名函数,数组);
含义:
将数组的每一项当作该匿名函数的若干个实参,传递到该匿名函数中,并执行该匿名函数,并可以从该匿名函数中返回数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值