7.10 匿名类

匿名类和普通类一样,只是没有名字,它可以继承、实现接口、使用trait,以及拥有自己的成员属性。

如果外部类中的方法返回了一个匿名类,那么在这个匿名类中并不能访问到外部类的私有成员和受保护的成员。

如果要在匿名类中访问外部类中受保护的成员,可以通过继承外部类。

如果要在匿名类中访问外部类中私有成员,可以给匿名类的构造函数传值。

简单的定义方式:

// 通过变量定义
$myClass = new class{
    public function __construct(){
        echo __class__;
    }
};

// 输出:class@anonymousE:\wwwroot\php\index.php000001D83BB60076

更详细的描述:

// 抽象类
abstract class One{};
// 接口对象
interface Two{};
// Trait
trait Three{};
// 打印出一个匿名类的信息
var_dump(new class('我是构造函数的参数', '我是参数二号') extends One implements Two{
    use Three;
    public $name = "iGuoji";
    const AGE = 26;
    static $desc = "hello world";
    public function __construct(string ...$args){
        var_dump($args);
        echo "<br />";
    }
    public function say(){
        echo static::$desc;
    }
});

通过同一个函数创建的匿名类得到的对象,它们将会是同一个类的实例。

// 通过函数返回匿名类
function newClass(){
    return new class{};
}

// string(56) "class@anonymousE:\wwwroot\php\index.php000001D83BB6004F"
$c1 = newClass();
var_dump(get_class($c1));

// string(56) "class@anonymousE:\wwwroot\php\index.php000001D83BB6004F"
$c2 = newClass();
var_dump(get_class($c2));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,604评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,051评论 18 399
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,424评论 9 118
  • 一、继承 当两个事物之间存在一定的所属关系,即就像孩子从父母那里得到遗传基因一样,当然,java要遗传的更完美,这...
    玉圣阅读 4,683评论 0 2
  • 好好考试 好好过六级啊 然后明天开始复习 好好考试 好好放假 好好生活 加油啊 六级一定会过的
    深度噪音阅读 1,456评论 0 0