PHP匿名函数使用技巧

  之前写过一篇闭包的使用(点击此处进入),这次深入汇总下php中匿名函数的深入用法和理解:

  php中的匿名函数 也叫闭包函数 允许指定一个没有名称的函数。把匿名函数赋值给变量,通过变量来调用,举个简单的例子:

<?php
$anonymousFunc = function($username){
    echo $username;
  };
$anonymousFunc("乔峰!");

  技巧1:  将匿名函数放在普通函数中,也可以将匿名函数返回,:这样就构成了一个简单的闭包

<?php
function closureFunc(){
    $anonymousFunc = function(){
        echo "乔峰!";
    };
    $anonymousFunc();//普通函数内部调用了匿名函数
}
closureFunc();//输出: 乔峰

  技巧2:  在匿名函数中引用局部变量(这里要引用一个php的关键字 use)

<?php

function closureFunc(){
    $username = '乔峰';
    $anonymousFunc = function() use($username){
        echo $username;
    };
    $anonymousFunc();//此处调用了匿名函数
}
closureFunc();//输出: 乔峰

  技巧3  在普通函数中返回匿名函数

<?php

function closureFunc(){
    $username = '乔峰';
    $anonymousFunc = function() use($username){
        echo $username;
    };
    return $anonymousFunc;// 函数返回匿名函数
}
$func = closureFunc();
$func(); //然后调用$func()

  技巧4 返回匿名函数并给匿名函数传参

<?php

function closureFunc(){
    $username = '乔峰';
    $anonymousFunc = function($lover,$skill) use($username){
        echo $username.$lover.$skill;
    };
    return $anonymousFunc;
}
$func = closureFunc();
$func("阿朱","擒龙手");//乔峰阿朱擒龙手

  技巧5 使用闭包改变上下文引用的变量值

<?php

function closureFunc(){
    $number = 100;
    $anonymousFunc = function() use($number) {
        $number++;
        echo $number.PHP_EOL;
    };
    echo $number.PHP_EOL;
    return $anonymousFunc;
}
$func = closureFunc();// 这里输出1,直接调用本函数的 echo $number.PHP_EOL; 即为100
$func();// 调用函数的返回值 $anonymousFunc  $number++ 即为101
$func(); //101
$func();//101

  上面的输入结果,发现后面的两个func()均返回 101,值并未发生改变,如果要累积++效果, 只要加一个 & 引用符号就可以了(匿名函数内的修改也会影响外部变量),修改下:

<?php

function closureFunc(){
    $number = 100;
    $anonymousFunc = function() use(&$number) {
        $number++;
        echo $number.PHP_EOL;
    };
    echo $number.PHP_EOL;
    return $anonymousFunc;
}
$func = closureFunc();// 这里输出1,直接调用本函数的 echo $number.PHP_EOL; 即为100
$func();// 调用函数的返回值 $anonymousFunc  $number++ 即为101
$func(); //102
$func();//103

  技巧6 把匿名函数当作参数传递

<?php
//定义普通函数,anonymousFunc 为参数变量
function myFunc($anonymousFunc){
    $anonymousFunc("乔峰");
}

myFunc(function($username){ //这里调用普通函数,并把 匿名函数作为参数 传给了myFunc中的$anonymousFunc
    echo $username;
});//输出 乔峰

  目前整理的就这些了,欢迎留言补充。。。

  无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。

原文地址:https://www.cnblogs.com/phpper/p/9939850.html

本站原创内容,如需转载请注明来源:https://www.liutonghui.com/166.html

上一篇 2018-11-02
下一篇 2018-11-21

评论列表(0条)

  • 暂时没有评论!

发表评论

captcha

相关推荐

  • 再谈PHP错误与异常处理

      请一定要注意,没有特殊说明:本例 PHP Version &lt; 7   说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程序,内容如下,然后命令行执行:php test.php &lt;?php $num = 0; try { echo 1/$num; } catch (Exception $e){ ......

    2017-06-12
    13780
  • 吊炸天的 PHP 7 ,你值得拥有

      2015年的夏天,虽然来得不算火热,但是在互联网技术的夏天,比任何一年都更为火热。   刚刚才结束了 5 月底的网易、支付宝、携程以及多家云存储厂商的接连故障的坏消息,6月上旬则迎来了编程语言界两大好消息,第一件是 Swift 2.0 发布以及开源,另一件是PHP 7 alpha版正式发布。这两件大事,都是可以载入相应的编程语言的史册级的事件。   Swift 2.0 的事,咱先不说了,本文的重点是带着大家见识一下鸟哥等众位大神......

    2015-06-25
    20392
  • 简单有效解决Sublime Text无法安装插件的问题

      Sublime Text是最受欢迎的代码编辑器之一,支持html、PHP、JS、CSS、JAVA、Python、C、C++等几乎所有语言的开发,因为界面简洁,内置代码高亮,代码自动补全,运行流畅,还支持各种各样的插件,经过扩展后甚至能成为一整套IDE来使用,堪称宇宙最强编辑器。   另一方面,由于Sublime Text是一款国外软件,技术支持的服务器也在国外,国内用户在安装插件时经常无法连接到服务器而无法安装插件,网上查到的一些......

    2018-03-25
    24112
  • 解决 PHP 8.1 隐式类型转换导致缩略图生成错误

      这几天解决了一个困扰已久的问题,我的博客系统在文章上传图片生成缩略图时,在本地测试环境没有任何问题,但在服务器环境中总是生成缩略图失败,报错:"Implicit conversion from float"。排查了 PHP 和环境扩展组件库、目录权限、图片格式大小等都没有问题。在百思不得其解时,我注意到了一个平时不太注意的细节,我在本地测试环境用的是 PHP 8.0,服务器上用的是 PHP 8.1,经过反复测试问题果然出在这里。  ......

    2023-09-04
    7150
  • PHP类的自动加载机制实现方法

      PHP的自动加载机制允许你在需要时自动加载所需的类文件,而无需手动包含或引入每个文件。PHP提供了 spl_autoload_register() 函数来实现自动加载机制。   以下是实现PHP类自动加载机制的步骤: &lt;?php // 自定义的自动加载函数 function my_autoloader($class) { include 'classes/' . $class . '.class.php'; } //......

    2019-03-14
    19060
  • CSS创建竖排文字的简单方法

      在制作网页的时候我们经常需要创建一些竖排的文字,或许这对你来说是一件很简单的事情,但是你是否想过用CSS可有N种创建竖排文字的方法?下面是由我翻译自Nettuts+的文章,希望这几种方法能够给你带来一些提示。   方法一:&lt;br /&gt;标签   一种可能的方法(但不推荐)是在每个字母后面添加&lt;br /&gt;标签来实现竖排文字: &lt;h1&gt; N &lt;br /&gt;E &lt;br /&gt;T ......

    2013-11-27
    13640
  • CSS clearfix清除浮动进化史

      我想大家在写CSS的时候应该都对清除浮动的用法深有体会,今天我们就还讨论下clearfix的进化史吧。   clearfix清除浮动   首先在很多很多年以前我们常用的清除浮动是这样的。 .clear{clear:both;line-height:0;}   现在可能还可以在很多老的站点上可以看到这样的代码,相当暴力有效的解决浮动的问题。但是这个用法有一个致命伤,就是每次清除浮动的时候都需要增加一个空标签来使用。   这种做法如果在......

    2014-11-18
    16870
  • PHP检查上传文件是否已存在

      在PHP中,可以使用以下步骤来检查上传的文件是否已存在或者重名:   获取上传文件的信息,包括文件名。   构建目标文件的路径。   使用 file_exists 函数检查目标文件是否已经存在。 &lt;?php $uploadDir = 'uploads/'; // 上传文件保存的目录 if ($_SERVER['REQUEST_METHOD'] === 'POST' &amp;&amp; isset($_FILES['upl......

    2015-08-30
    16020