博客列表 >7.30 PHP函数默认参数、剩余参数、匿名函数创建并调用外部数据

7.30 PHP函数默认参数、剩余参数、匿名函数创建并调用外部数据

大灰狼的博客
大灰狼的博客原创
2019年08月02日 13:41:301337浏览

PHP函数的默认参数

定义函数形参时可以设置默认参数,当函数被调用未传参时会使用默认参数。有传参时会优先传参值。

实例

<?php
//演示默认参数
//定义函数sum求和 有$a、$b 2个参数均设置了默认值5
function sum($a=5,$b=5){
	return $a+$b;
};

//函数调用 我不传输任何参数 但是函数会返回10 因为有2个默认参数
echo sum(),'<hr>';
//我值传一个值 此时结果是15 参数会代替默认参数 也就是$a是10 
echo sum(10),'<hr>';
//当传入2个值时候 分别以我传参为优先级最高 来计算。
echo sum(10,10),'<hr>';
//当参形参自定义后 要按照顺序传入参数

运行实例 »

点击 "运行实例" 按钮查看在线实例


PHP剩余参数 
可以支持部分参数以数组的方式传入 适合有大量参数时候使用。

实例

<?php
//演示 剩余参数:可变长参数
function sum3($a,$b,...$c){
	return $a+$b+array_sum($c);
};

echo sum3(5,5,10,10,10),'<hr>';

//根据剩余参数特性可以将部分参数从外部数组直接获取
function sum4($a,$b,...$arr){
	return $a+$b+array_sum($arr);
};
$arr=[20,20,20];
echo sum4(5,5,...$arr),'<hr>';


//限制返回值  限制第一个参数为int整数  '6'运算时候会自动转换成数字 不能转换的会忽略不会报错
function sum5(int $a,$b,...$arr){
	return $a+$b+array_sum($arr);
};
$arr=[6,'p6d','6lang'];
echo sum3(5,5.2,...$arr),'<hr>';

//上面数组中 虽然出现了 字符串 但是并不会报错 不能转换为数组的 只是不进行计算而已。

运行实例 »

点击 "运行实例" 按钮查看在线实例


PHP匿名函数

实例

<?php
//匿名函数

//匿名函数 函数表达式
$sum=function($a,$b){
	return $a+$b;
};
//调用输出
echo $sum(2,3),'<hr>';

运行实例 »

点击 "运行实例" 按钮查看在线实例


PHP匿名函数获取外部数据

实例

<?php
// 匿名函数获取外部数据
$str='我是全局变量中的一段文字。11111';
$str2='我是全局变量中的一段文字。22222';
//在匿名函数中可以通过 use($var)将全局变量 传值 获得值(函数内修改不影响全局)
$func1=function() use($str){
	$str1='我想看看外面的世界~';
	return $str;
};

echo $func1();

$str='我是全局变量中的一段文字。11111';
//在匿名函数中可以通过 use(&$var)将全局变量 引用传递(传址)调用(函数内修改影响全局)
$func2=function() use(&$str2){
	$str2='我被刁民 func2 使用了& 把我给顶替了~';
	return $str2;
};

echo $func1(),'<hr>';
echo $func2(),'<hr>';


//函数允许嵌套调用
function demo(){
	$name='大灰狼 函数嵌套调用';
	return function() use($name){
		return $name;
	};
};
//因为demo返回的是一个函数 所以得先放到一个变量中 在运行
$f1=demo();
echo $f1(),'<hr>';
//也可以简化为
echo demo()();

运行实例 »

点击 "运行实例" 按钮查看在线实例


call_user_func_array()的常用场景

// 语法 call_user_func_array($callback, $param_arr);

常用场景如
1、需要调用的函数名是未知的;
2、要调用函数的参数类型及个数也是未知的;

实例

//实际使用

function sayEnglish($fName, $content) {
	echo 'I am ' . $content;
}

function sayChinese($fName, $A, $B) {
	echo $A . $B;
	echo "<br>";
}

function say() {
	$args = func_get_args();
	call_user_func_array($args[0], $args);
}

say('sayChinese', '我是', '中国人');
say('sayEnglish', 'Chinese');

//改进-----------------------------------------------------
echo '<hr>';
function sayEnglish2(...$arr) {
	echo 'Americans say: <pre>' .print_r($arr,true);
}

function sayChinese2(...$A) {
	echo '中国说:<pre>'.print_r($A,true);
	echo "<br>";
}

function say2($fname,...$arr) {
	call_user_func_array($fname, ...$arr);
}

say2('sayChinese2', ['我是中国人', '我不姓福','但是我日子幸福']);
say('sayEnglish2', ['Chinese','good']);
//say($funcName,$conterArr);

运行实例 »

点击 "运行实例" 按钮查看在线实例


动态调用普通函数时,比如参数和调用方法名称不确定的时候很好用。
函数名可以用参数的方式传递进去,因而调用不同函数。 配合func_get_args()或剩余参数 接收参数到数组中,参数的个数也可以不一致。

不需要判断函数类型,无论是普通函数,类的静态方法或者类的方法,均直接调用,不用去判断方法的类型。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议