lampfree小站

学习交流lamp技术,笔记记录

php中的匿名函数和use怎么使用

评论

PHP匿名函数

匿名函数 顾名思义就是没有名字的函数。 php中也叫做闭包函数
函数没有名字怎么定义怎么用呢?

定义方法

$hi = function () {
  echo 'hi';  
};

这个就是个匿名函数, 注意后的分号.

使用方法

$hi();  // 这样就运行了
$new_hi = $hi;
$new_hi(); // hi

可以看到使用方法也是挺简单的,当做一个变量,然后后面加上 () 就可以运行了。


怎么使用

可以当做一个参数去用

比如一个问题: 如何把 this_is_test_var -> thisIsTest_Var

$ans = preg_replace_callback("#_([a-z])#", function ($match) {
    return strtoupper( $match[1]);
}, "this_is_test_var");
var_dump($ans); // string 'thisIsTestVar' (length=13)

这里 使用一个匿名函数,作为 preg_replace_callback 的参数(二个参数)

传递参数的问题 use

这个准确的说应该是 use 使父作用域的变量可以在匿名函数内使用

$name = "zhangs";

$f = function () use ($name) {
    echo $name;
};

$f();

这里如果写 $f = function($name) { echo $name }; 那么两个 $name ,就会出现两次问题提示。

一个思考 A or B

$var = 'A';
$f = function () use ($var) {
    echo $var;
};
$var = 'B';

$f();

这里的结果是 A , 不是B
理由: $f 是在程序的运行过程中创建的, 当创建的时候 $var = 'A'; 所以输出是 'A'.
如何输出 B
方法也很简单,使用引用就可以。 $var -> &$var

// function () use ($var) 
// -> function () use (&$var)