PHP闭包和反射的一点总结

PHP闭包和反射的一点总结_第1张图片

一、什么是闭包

闭包是指有权访问另一个函数作用域的变量的函数

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

匿名函数目前是通过 Closure (PHP 5 >= 5.3.0, PHP 7)类来实现的。

闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:

闭包的使用场景:OO使用

_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();

连接闭包和外界变量的关键字:USE

闭包可以保存所在代码块上下文的一些变量和值。PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字。

闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量:superglobals$this或者和参数重名

二、什么是反射

PHP Reflection API是PHP5才有的新功能,它是用来导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。

反射是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。

反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。

其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。

PHP反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传递参数,动态调用类的静态方法。

反射api是PHP内建的OOP技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些OOP扩展被称为反射。

平常我们用的比较多的是 ReflectionClass类 和 ReflectionMethod类。

反射示例:

id;
 }

 public function setId($v) {
  $this->id = $v;
 }

 public function getName() {
  return $this->name;
 }

 public function setName($v) {
  $this->name = $v;
 }

 public function getBiography() {
  return $this->biography;
 }

 public function setBiography($v) {
  $this->biography = $v;
 }
}

$class = new ReflectionClass('Person'); // 建立 Person这个类的反射类  
$instance  = $class->newInstanceArgs($args); // 相当于实例化Person 类 

参考

1、PHP闭包(Closure)初探
2、匿名函数
3、深入了解PHP闭包的使用以及实现
4、PHP中的闭包小谈(推荐阅读)
5、php什么时候使用闭包(推荐阅读)
6、PHP Reflection API详解
7、PHP 反射机制Reflection
8、PHP的反射类ReflectionClass、ReflectionMethod使用实例
9、php反射类ReflectionClass用法实例详解

你可能感兴趣的:(PHP闭包和反射的一点总结)