이전 글에서는 "PHP에서 네임스페이스의 정의와 사용법(상세 예시)"을 가져왔는데, 이번 글에서는 계속해서 PHP에서 네임스페이스의 정의와 사용법을 자세히 소개하겠습니다. clone 키워드 사용에 관한 PHP입니다. 모두에게 도움이 되기를 바랍니다!
이전 연구에서는 $this
, $new
등과 같은 많은 키워드가 있었습니다. 오늘은 PHP에서 계속해서 살펴보겠습니다. code>clone도 비교적 일반적으로 사용되는 키워드입니다. clone 키워드를 배우기 전에, PHP의 객체 모델이 객체를 참조로 호출한다는 것을 알아야 하지만, 객체의 복사본도 생성해야 합니다. 목적은 원본 객체가 변경될 때 객체 복사본에 영향을 주지 않는 것입니다. $this
、$new
之类的,今天我们继续来看一下在PHP中也算比较常用到的关键字clone
克隆关键字。在学习克隆关键字之前,我们需要知道PHP中的对象模型是通过引用来调用对象的,但是又是偶需要建议一个对象的副本,目的就是想再原有对象改变的时候能够不影响到对象副本。
这时候如果使用new关键字是可以重新创建对象,然后再给属性赋上相同的值,也是可以起到新建副本的作用,但是这种方法不仅麻烦而且容易出错,这时候就希望PHP能有一个完全一样的对象,而且这两个还不是互相干扰的,也就是我们想的克隆。那应该怎样去实现呢?不慌,接着看。
<strong><span style="font-size: 20px;">clone</span></strong>
关键字
我们希望有一个能够和原本对象互不干扰的副本,在PHP中通过clone关键字就可以实现克隆对象了。
clone
关键字的语法格式如下:
克隆对象名称 = clone 原对象名称;
你可以把克隆这个动作理解为,把对象的内存区域进行复制,赋值后的对象与原对象之间是相互独立的。并且他们之间的成员方法、属性和值都是完全相同的。
接下来我们通过一个简单的实例来看一下clone的能力吧,示例如下:
<?php class father{ public $study1, $study2; public function __construct($study1, $study2){ $this -> study1 = $study1; $this -> study2 = $study2; } public function output(){ echo $this -> study1.','. $this -> study2.'<br>'; } } $obj = new father('好好学习', '天天向上'); $obj2 = clone $obj;//克隆$obj $obj -> output(); $obj2 -> output(); echo '<pre class="brush:php;toolbar:false">'; var_dump($obj); var_dump($obj2); ?>
输出结果:
其中我们需要注意的是,如果使用=将一个对象赋值给一个变量,那么这时得到的将是一个对象的引用,通过这个变量更改属性的值将会影响原来的对象。所以还是得用clone,更改属性值不会影响到原来的对象。
通过上述实例,我们已经知道应该如何去克隆一个对象来为我们所用了,但是对象克隆成功后,他的属性、成员方法以及值都是和原对象一模一样完全相同的,那这时候我们光说更改属性不会影响到原来的对象,但是应该怎样去给克隆后的副本成员属性重新赋值呢?这时候我们就要用到PHP魔术方法中的__clone()
方法。
<strong><span style="font-size: 20px;">__clone()</span></strong>
方法
PHP中__clone()
方法是不能够直接调用的,有clone
才有__clone()
,只有通过clone关键字克隆了一个对象的时候,才能够通过这个克隆出来的对象来调用__clone()方法。
这时候再用到clone创建副本的时候,就需要注意了,PHP会检查__clone()是否存在。
要是不存在的话,PHP会默认赋值对象的全部属性;如果__clone()存在,也就是定义过了,那么也就会负责了新对象的属性。
加下来我们通过一个实例来看一下,实例如下:
<?php class father{ public $name, $url; public function __construct($name, $url){ $this -> name = $name; $this -> url = $url; } public function output(){ echo $this -> name.','.$this -> url.'<br>'; } public function __clone(){//通过__clone()来更改新对象的属性 $this -> name = '福如东海'; $this -> url = '寿比南山'; } } $obj = new father('好好学习', '天天向上'); $obj2 = clone $obj; $obj -> output(); $obj2 -> output(); ?>
输出结果:
由上述实例,可以看出__clone() 方法不需要任何参数。其中我们还有一点可以知道的就是,想要禁止克隆的话,只需要在类中设置一个空的,访问权限为 private
(私有的)的 __clone()
<strong><span style="font-size: 20px;">복제</span></strong>
키워드
clone
키워드의 구문 형식은 다음과 같습니다. 🎜rrreee🎜복제 작업은 개체의 메모리 영역을 복사하는 것으로 이해하면 할당된 개체는 원본 개체와 독립적입니다. . 그리고 그 사이의 멤버 메소드, 속성, 값은 완전히 동일합니다. __clone()
메소드를 사용하겠습니다. <strong><span style="max-width:90%">__clone()</span></strong>
메서드🎜🎜PHP의 __clone()
메서드는 직접 호출할 수 없습니다. clone
만 __clone()
, clone 키워드를 통해 객체가 복제된 경우에만 복제된 객체를 통해 __clone() 메서드를 호출할 수 있습니다. private
(비공개)인 클래스에 빈 __clone()
만 설정하면 된다는 것입니다. code> 메소드를 사용하면 복제 금지 목적을 달성할 수 있습니다. 🎜🎜관심이 있으시면 "🎜PHP 비디오 튜토리얼🎜"을 클릭하여 PHP 지식에 대해 자세히 알아볼 수 있습니다. 🎜위 내용은 PHP에서 clone 키워드와 __clone() 메소드 사용(자세한 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!