【PHP】闭包的使用

简介: 【PHP】闭包的使用

一、介绍


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


二、使用场景


1、动态调用静态类的时候



<?php

class test

{

   public static function getinfo()

   {

       var_dump(func_get_args());

   }

}

call_user_func(array('test', 'getinfo'), 'hello world');

2、在callback函数中使用



<?php

//eg array_walk array_map preg_replace_callback etc

echo preg_replace_callback('~-([a-z])~', function ($match) {

   return strtoupper($match[1]);

}, 'hello-world');

// 输出 helloWorld

?>

3、赋值给一个普通的变量



<?php

$greet = function($name)

{

   printf("Hello %s\r\n", $name);

};

$greet('World');

$greet('PHP');

?>

4、使用use从父域中继承



<?php

$message = 'hello';

// 继承 $message

$example = function () use ($message) {

   var_dump($message);

};

echo $example();

// Inherit by-reference

$example = function () use (&$message) {

   var_dump($message);

};

echo $example();

// The changed value in the parent scope

// is reflected inside the function call

$message = 'world';

echo $example();

5、传递参数



<?php

$example = function ($arg) use ($message) {

   var_dump($arg . ' ' . $message);

};

$example("hello");

6、OO中的使用



<?php

class factory{

   private $_factory;

   public function set($id,$value){

       $this->_factory[$id] = $value;

   }

 

   public function get($id){

       $value = $this->_factory[$id];

       return $value();

   }

}

class User{

   private $_username;

   function __construct($username="") {

       $this->_username = $username;

   }

   function getUserName(){

       return $this->_username;

   }

}

$factory = new factory();

$factory->set("zhangsan",function(){

   return new User('张三');

});

$factory->set("lisi",function(){

  return new User("李四");

});

echo $factory->get("zhangsan")->getUserName();

echo $factory->get("lisi")->getUserName();

7、函数中的调用



<?php

function call($callback){

           $callback();

   }

call(function() {

   var_dump('hell world');

});


相关文章
|
JavaScript 前端开发 PHP
PHP闭包(Closure)初探
PHP闭包(Closure)初探
69 0
|
存储 PHP
php序列化闭包函数,php反序列化闭包函数,php如何序列化/存储闭包(Closure)
php序列化闭包函数,php反序列化闭包函数,php如何序列化/存储闭包(Closure)
243 0
|
JavaScript PHP 前端开发
php的匿名函数和闭包函数
php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因为大家习惯上写了函数就是用来调用的,匿名函数和闭包函数做什么用的? 匿名函数 php官方解释如下: 匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。
1073 0
|
Web App开发 PHP
|
JavaScript PHP 前端开发
PHP闭包(Closure)初探
不知不觉发现PHP已经出到了5.5版本,而自己一直在用PHP5.2,让我看起来像深山出来的小伙子一样,又土又落后。在我习惯在javascript中使用闭包之后,忽然间对PHP的闭包打起了兴趣。 于是乎在网上下了个WAMP集成开发环境,是PHP5.3版本的(PHP5.3开始引入了闭包的特性),不得不说WAMP安装使用真的很方便。
834 0
|
JavaScript 前端开发 API
PHP V5.3 中的新特性,第 2 部分: 闭包及 lambda 函数
闭包函数和 lambda 函数绝对不是新出现的概念;它们均来自函数编程领域。函数编程 是一种编程风格,它将关注点从执行命令转移到表达式计算。这些表达式是使用函数构成的,结合这些函数可以得到我们要查找的结果。
786 0
|
JavaScript 前端开发 API
PHP V5.3 中的新特性,第 2 部分: 闭包及 lambda 函数
闭包函数和 lambda 函数绝对不是新出现的概念;它们均来自函数编程领域。函数编程 是一种编程风格,它将关注点从执行命令转移到表达式计算。这些表达式是使用函数构成的,结合这些函数可以得到我们要查找的结果。
1428 0
|
7月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
81 0