我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

php里面的use有很多种使用方法。比较常见的是大家常见的引入第三方库的功能,相当于其它编程语言里面的require或者import语句。另外一个比较常见的使用方式就是在php匿名函数里面,使用use()引入另外一个作用域内的变量。本文主要内容就是php匿名函数中use()的使用技巧。

苏南大叔:php匿名函数,如何通过use()使用外部变量传递参数? - 外部变量传参
php匿名函数,如何通过use()使用外部变量传递参数?(图2-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文测试环境:win10nginx@1.15.11php@8.2.10-nts

匿名函数

php里面的匿名函数的写法,目前还是没有js里面写的简练,依然有上升改进的空间。范例如下:

$greeting = function ($hi) {
    echo ($hi . " 苏南大叔");
};
$greeting("hola");

注意:匿名函数定义结束后的分号不能省略,否则报错。(普通的非匿名函数,必然是不需要这个分号的。)

Parse error: syntax error, unexpected end of file

global引入变量

如果在php函数里面使用外部的变量,是无法访问的,需要global一下外部的变量。(目前仅有php是有这个奇葩规定的,其它高级编程语言没有这个规定。)参考代码:

$person = "苏南大叔";
$greeting = function ($hi) {
    global $person;
    echo ($hi . " ".$person);
};
$greeting("hola");

use($para)引入变量

php@7之后,引入了新的表达方式,就是use()来实现global关键字类似的功能。测试代码:

$person = "苏南大叔";
$greeting = function ($hi) use ($person) {
    // global $person;
    echo ($hi . " ".$person);
};
$greeting("hola");    // hola 苏南大叔
// function greeting ($hi) use ($person) {}  // error

普通的非匿名函数不能使用use(),会报错:

Parse error: syntax error, unexpected token "use", expecting "{"

苏南大叔:php匿名函数,如何通过use()使用外部变量传递参数? - 匿名函数use
php匿名函数,如何通过use()使用外部变量传递参数?(图2-2)

use(&$para)引入变量指针

$person = "苏南大叔";
$greeting = function ($hi) use (&$person) {
    echo ($hi . " ".$person);
};
$person = "sunan大叔";
$greeting("hola");   // hola sunan大叔

use()引入多个变量

$person = "苏南";
$person_plus = "大叔";
$greeting = function ($hi) use (&$person, $person_plus) {
    // global $person, $person_plus;
    echo ($hi . " " . $person . $person_plus);
};
$person = "sunan";
$greeting("hola");

作用范围

值得一提的是:这里的use($p1,$p2)中的参数$p1$p2,并不能说对标的是global变量,实际上对标的是匿名函数上一层存在的变量。也就是说,如果匿名函数存在于一个普通函数体内部的话。普通函数体内部的变量,才是use()可以引入传参的范围。

结束语

苏南大叔写过很多php经验文章,可以点击下面的链接,查看更多内容:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php