闭包函数也可以作为变量的值来使用。PHP会自动把表达式转换成内置类Closure的 对象实例。把一个closure对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号。 Example #2 匿名函数变量赋值示例<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};$greet('World');//这个语法看起来很奇怪啊,$greet是一个变量为何按函数调用语法来使用呢?
$greet('PHP');
?> 

解决方案 »

  1.   

    可以看到var_dump($greet instanceof Colsure);//bool(true)应该说变量实质上是一个Colsure对象了吧,但即使对象,也不能这样调用啊,比如class o{
      var $_v;
      function o($v){
        $_v=$v;
      }
    }$obj = new o('test');
    $obj('new values');//此处语法错误!
      

  2.   

    倒是和C语言中函数指针具有相同的特性://C
    main(){
      float (*p)();
      float func(int n);
      p=max;
      (*p)(111);//调用函数
    }
    float func(int n){
      return n;
    }
      

  3.   


    问题是这里,$greet是一个变量,或者也可以说是一个对象,但这个调用“$greet('World');”,却不是按变量那样使用,也不是按对象那样使用,而是按函数那样使用,感觉很别扭。
      

  4.   

    原来是php5.3新特性,一个具有__invoke方法的类,哈哈。