php引用参数,回调函数

引用参数

$a = 1;
function fun(&$var){
	$var++;
}
fun($a);
echo $a;  	//2

  像这样形参前加'&',即使函数没有返回值,通过形参变量也可以改变实参的值,我们称之为引用参数。相当于函数体内的局部变量$var引用了实参$a。$var和$a同步改变。
  还可以

$a = 1;
function &test(){
	static $var = 1;
	return $var;
}
$a = &test();
echo $a;		//1
$a = 10;
echo test();	//10

  最后调用test()打印的是10,按理来说$var是静态变量,只有第一次定义赋值,这里既是1。可为什么函数返回的是10呢?因为我们$a = &test();这一步就相当于$a引用了函数的返回值,既$a与test()的返回值同步,$a赋值为10,所以最后打印test()的返回值也就是10.我们可用根据这个特点对函数运算结果进行即使修改

  总结以下内容可以引用传递:

  • 变量,例如 foo($a)
  • New 语句,例如 foo(new foobar())
  • 从函数中返回的引用

  例如

<?php
function &bar()
{
    $a = 5;
    return $a;
}
foo(bar());

匿名函数

语法:
  $变量 = function(形参){return '值';};
  $param = function(){return 10;};

调用:
  $param();

ps:

  • 匿名函数就是一个没有名字的函数
  • 定义匿名函数的时候注意写上最后面的分号

回调函数

变量函数(可变函数)

$a = 'fun';
function fun(){
	echo "我是函数fun";
}
$a();	//打印"我是函数fun",成功调用函数fun

  变量函数即把函数名以字符串形式存入变量里,通过变量名后加"();"间接调用函数,这就叫变量函数,可动态的调用函数。

  回调函数则是在变量函数的基础上,把变量名作为实参传入,这样就可以在函数体内通过给形参名加“()”,调用其他函数,实现一个函数体内多个功能封装。

function fun1(){
	echo "我是fun1";
}
$fun2 = function(){
	echo "我是fun2";
};
function back($one, $two){
	echo "我是回调函数,我可以通过形参调用fun1和fun2"."<br>";
	$one();
	echo "<br>";
	$two();
	echo "<br>";
	(function(){
		echo "我是立即执行函数";
	})();
}
back('fun1',$fun2);
  • 实际上函数的调用就是 '函数名'+();
posted @ 2020-03-20 06:08  正义联盟  阅读(619)  评论(0)    收藏  举报