php设计模式原型模式,原型模式_设计模式_设计模式之原型模式 - Lane Blog

10

8

Clicks: 6614 Date: 2014-04-21 21:48:35 Power By 李轩Lane

原型模式提取重复功能,避免了程序员喜欢复制粘贴的坏习惯。设计模式中的原型模式就是,用原型实例指定创建对象的重力,通过拷贝这些原型来创建新的对象从一个对象再创建另外一个可定制的对象,而且不需要知道创建的任何细节。

浅复制 VS 深复制:

浅复制是对数字,字符串等类型进行传值复制,而对对象来讲是引用复制,即只是对内存地址进行赋值而不是新建一个对象的变量。在浅复制中,对一个对象的属性改变,另一个对象的该属性也会被改变,类比于C语言的指针,PHP在调用方法时&$var的传递。

以PHP为代码环境。

//家庭类

class Home{

public $money;

public function __construct($money){

$this->money = $money;

}

}

//家庭成员类

class member{

public $id;

public $name;

public $obj;

public function __construct($id, $name, Home $obj){

$this->setId($id);

$this->setName($name);

$this->obj = $obj;

}

public function setId($id){

$this->id = $id;

}

public function setName($name){

$this->name = $name;

}

public function display(){

echo 'ID为' . $this->id . ',名称为' . $this->name . ',资产为' . $this->obj->money . '
';

}

public function __clone(){

//深度复制(克隆),因为克隆只能克隆数字,字符串等,对对象变量是引用传值。

$this->obj = clone $this->obj;

}

}

//客户端/接口

$obj1 = new member(1, '小轩', new Home('10000'));

$obj1->display();

$obj2 = clone $obj1;

$obj2->setId(2);

$obj2->setName('小玮');

$obj2->obj->money = 2000;

$obj2->display();

//根据这句输出可以看到,对象1和对象2值是不一样的,删掉上面的注释部分再看,又是一样的了,这就是深复制和浅复制。

$obj1->display();

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值