PHP7之匿名类

匿名类可以创建一次性的简单对象

如下代码所示:

<?php
/*********************匿名函数************************/

$fu = function(){
    echo "这是匿名函数";
};
$fu();
echo "<br/>";

class Animal{
    
    public $num;
    public function __construct($key){
        $this->num = $key;
    }
    
    public function getValue($sum):int{
        return $this->num+$sum;
    }
}
$animal = new Animal(5);
echo $animal->getValue(10);

echo "<br/>";

/****************************匿名类***********************/
echo "这是匿名类<br/>";
echo (new class(5) extends Animal{})->getValue(90);
echo "<br/>";
echo (new class(5) extends Animal{})->getValue(100);

?>

输出如下

Paste_Image.png
匿名类被嵌套进普通类后,不能访问这个 外部类的 私有(private)、受保护(protected)方法或属性。但如果想访问protected方法或属性,可以 继承(extends)这个外部类,想访问这个 私有(private)方法或属性,可以通过构造器,如下代码所示:
<?php
class Animal{
    private $num = 1;
    
    protected $age = 2;
    
    protected function bark(){
        return 10;
    }
    
    public function drive(){
        return new class($this->num) extends Animal{
            protected $id;
            
            public function __construct($sum){
                $this->id = $sum;
            }
            
            public function eat(){
                return $this->id+$this->age+$this->bark();
            }
        };
    }
}

echo (new Animal)->drive()->eat();
?>

以上代码输出 13

匿名类的闭包实现,如下
$test = array();
for($i=0; $i<6; $i++){
    
    $test[] = new class($i){
         
        public $age;
        
        public function __construct($num){
            $this->age = $num;
        }
        
        public function getValue(){
            return $this->age;
        }
    };
}
echo $test[0]->getValue();
echo "<br/>";
var_dump($test[2]);

如下显示

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,288评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,799评论 18 399
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,600评论 9 118
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,295评论 25 709
  • 你是否羡慕他人谁谁和某公司的老总签约了,或者一起出去玩了。回头你再看看自己,很逊色。估计别人看了,也不想和你继续谈...
    青果果说阅读 3,177评论 5 5

友情链接更多精彩内容