php实现设计模式之 原型模式
?php/* * 原型模式:通过复制已经存在的对象来创建新对象。 * 通过原型实例指定创建对象的种类,并且通过copy这些原型创建信的对象 * 是创建型模式 * 有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如
<?php /* * 原型模式:通过复制已经存在的对象来创建新对象。 * 通过原型实例指定创建对象的种类,并且通过copy这些原型创建信的对象 * 是创建型模式 * 有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如复制,使用原型模式实现。 * 原型模式还可以某个对象在运行中的状态 */ interface Potrotype{ public function copy(); } //通过在原型类中加一个copy方法,使得这个原型类的实例可以被复制 class Demo implements Potrotype{ private $state; public function setState($state){ $this->state = $state; } public function getState(){ return $this->state; } public function copy(){ return clone $this;//浅拷贝 /* * 深拷贝 */ // $tmp = serialize($this); // $tmp = unserialize($tmp); // return $tmp; } } class Client{ public static function main(){ $obj1 = new Demo(); $obj1->setState(23); $obj2 = $obj1->copy(); $res = $obj2->getState(); echo $res; } } Client::main(); ?>
说一下浅拷贝和深拷贝
大学学习c语言时,提到过这两个的区别。我依稀记得是 值拷贝是深拷贝,而指针拷贝是浅拷贝。
浅复制呢又称为浅拷贝,深复制又称为深拷贝。
浅复制的话,就是通过一个原型实例(这里暂称为老对象)克隆所得到的对象(这里暂时称为新对象),
而这个新对象中所有的值类型变量都含有与老对象相同的值,
但是,新对象所有的对其他对象的引用却是和老对象指向同一个地方,
即对引用类型来说,老对象和新对象指向同一个引用对象。
深复制呢,和浅复制就一点不同,那就是,
新对象所有的对其他对象的引用都是指向了复制过的对象,而不再是和老对象指向同一个对象。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP
