Blogger Information
Blog 36
fans 4
comment 3
visits 31857
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
7.30 PHP函数默认参数、剩余参数、匿名函数创建并调用外部数据
大灰狼的博客
Original
1341 people have browsed it

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()或剩余参数 接收参数到数组中,参数的个数也可以不一致。

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

Correction status:qualified

Teacher's comments:php中的函数知识还有很多, 更多可以查阅官方手册
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post