php学习笔记5--php中的可变变量,可变函数及匿名函数


可变变量指的是:将一个变量的值再次当做一个变量名从而得到另外一个变量的值。
如:
$name = 'dqrcsc';
$myname = 'name'; //$myname的值碰巧是另一个变量的变量名
echo $name; //输出$name的值 'dqrcsc'
echo $myname; //输出$myname的值 'name'
echo $$myname; //得到$myname的值 'name',通过$再将其解析为一个变量 $name,从而输出$name的值 'dqrcsc'

匿名函数:即没有名字的函数
php中的函数的定义在编译阶段,会被系统存放到代码区,可以通过函数名在代码区中找到该函数的代码。
若没有名字,则需要通过变量来保存函数的内存地址。
$func = function(){
echo 'test';
};
var_dump($func); //object(Closure)#1 这是一个闭包
保存了函数的地址,之后要怎么调用该匿名函数呢?
回想函数的调用形式:myfunc();在函数名后面跟着一对括号,表示调用该函数。匿名函数调用形式与之相同
$func(); //表示调用该变量所指向的匿名函数
既然加上()就被认为是调用函数,这里就自然而然的出现了可变函数的概念

可变函数:如同可变变量一样,一个变量保存了函数的名字,取得该函数的值即函数的名字,然后将其当做函数解析。
如:
function test(){
echo 'test';
}
$func = 'test';
$func(); //$func取得该变量的值'test',后面加上(),被当做是函数test()去调用。

若是匿名函数呢?
$func = function(){
$name = 'dqrcsc';
echo $name;
};
$myfunc = 'func'; //$myfunc是一个可变变量,其存储的是$func的变量名
$$myfunc(); //$$myfunc解析可变变量,获得$func的值,后面加上(),当做函数去调用,便输出'dqrcsc'了

由上可知,可变变量与可变函数的原理都是一样的,只是解析方式不同而已,一个变量想将它解析为可变变量,再加上个$符号即可,
想将它解析为可变函数,后面加上()即可。
那么问题来了,函数和变量可以同名吗?答案是可以的。
function test(){
echo 'function';
}
$test = 'var'; //与函数同名的变量
$myvar = 'test';//定义一个变量刚好存放的值为变量名和函数名
echo $$myvar; //将其解析为可变变量,输出'var'
$myvar(); //将其解析为可变函数,输出'function'

转载于:https://www.cnblogs.com/dqrcsc/p/4390971.html

你可能感兴趣的:(php)