zoukankan      html  css  js  c++  java
  • 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'

  • 相关阅读:
    Java集合的Stack、Queue、Map的遍历
    LinkedHashMap的实现原理
    HashSet的实现原理
    HashMap的实现原理
    leetcode526
    leetcode406
    leetcode413
    leetcode513
    leetcode338
    leetcode419
  • 原文地址:https://www.cnblogs.com/dqrcsc/p/4390971.html
Copyright © 2011-2022 走看看