zoukankan      html  css  js  c++  java
  • PHP基础知识之————匿名函数(Anonymous functions)

      匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

    创建闭包

    Example #1 匿名函数变量赋值示例(http://laravelacademy.org/post/4341.html)

    <?php
    $fun = function($name){
        printf("Hello %s
    ",$name);
    };
    echo $fun('Tinywan');
    echo $fun('Github');

    打印结果:

    Tinywan
    Github

    闭包和普通的PHP函数很像:常用的句法相同,也接受参数,而且能返回值。不过闭包没有函数名。

    注:我们之所以能调用$greet变量,是因为这个变量的值是一个闭包,而且闭包对象实现了__invoke()魔术方法,只要变量名后有(),PHP就会查找并调用__invoke方法。

      我们通常把PHP闭包当做函数会方法的回调使用,事实上,很多PHP函数都会用到闭包,比如array_map和preg_replace_callback,这是使用PHP匿名函数的绝佳时机。记住,闭包和其他值一样,可以作为参数传入其他PHP函数:

    $numberPlusOne = array_map(function ($number) {
        return $number +=1;
    }, [1, 2, 3]);
    print_r($numberPlusOne);
    function demo1(){
        function a(){
            echo 'a Function'."
    ";
        }
         function b(){
            echo 'b Function';
        }
    }
    //a() 这样是不可以的,直接报错
    demo1(); //demo()1调用了,a()函数就可以调用了, a();

    在函数内部定义一个匿名函数,同时使用匿名函数,(这可不是闭包哦!!)

    function funDemo(){
        $demo = function($str){
            echo $str;
        };
        //调用匿名函数,在这里调用是OK的!
        $demo('Tinywan');
    }
    funDemo(); //OK!
    $demo('Github'); //尝试调用匿名函数,发生错误!

    错误信息:

    Fatal error: Uncaught Error: Function name must be a string in E:wamp64wwwphp-netfunctionExample#2.php on line 32
    Error: Function name must be a string in E:wamp64wwwphp-netfunctionExample#2.php on line 32

     

    function funDemo(){
        $str1 = 100; //外部函数变量
        $str2 = 200;
        //闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。
        $demo = function() use ($str1,$st){
            echo $str1."
    ";
            echo $str2;
        };
        $demo("Tinywan");
    }
    funDemo(); //OK!

    打印结果:100 200

     

  • 相关阅读:
    小峰视频十三:二维数组
    小峰视频十二:java数组
    小峰视频十一:循环结构的跳出
    小峰视频十:循环while、for
    小峰视频九:选择语句if、switch
    小峰视频八:逻辑运算符、关系运算符、三门运算符
    小峰视频七:数据类型转换、数据运算
    eggjs+vue实现下载图片 js下载网络图片
    报错/Warning: You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored
    React/事件系统
  • 原文地址:https://www.cnblogs.com/tinywan/p/6507492.html
Copyright © 2011-2022 走看看