文档「设计模式全集」-原型模式中有个疑问

原型模式小节的示例代码:

    ......
        $fooPrototype = new FooBookPrototype();
        for ($i = 0; $i < 10; $i++) {
            $book = clone $fooPrototype;
            $book->setTitle('Foo Book No ' . $i);
            $this->assertInstanceOf(FooBookPrototype::class, $book);
        }
    ......

疑问:
在循环中「clone」对象实例变量和不使用「clone」关键字直接赋值使用这个对象实例变量的区别是什么呢?
看文档中对「clone」关键字的解释

当对象被复制后,PHP 5 会对对象的所有属性执行一个浅复制(shallow copy)。所有的引用属性仍然会是一个指向原来的变量的引用。

理解下来的意思,因为「clone」是浅拷贝对象,所以在循环中使用会更节省开销?

php
Kill Time, Or Kiss Time.
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2

在循环中「clone」对象实例变量和不使用「clone」关键字直接赋值使用这个对象实例变量的区别是什么呢?

直接赋值就是引用了,没有 新建 对象。

因为「clone」是浅拷贝对象,所以在循环中使用会更节省开销?

是的,不知道有没有其他原因。

5年前 评论

复制对象比新创建对象更节省资源。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!