>백엔드 개발 >PHP 문제 >PHP 복제 방법이란 무엇입니까?

PHP 복제 방법이란 무엇입니까?

藏色散人
藏色散人원래의
2020-10-14 16:40:313718검색

php clone 메소드는 정수 $a를 변수 $b에 할당하면 $b는 $a의 "복사본"이지만 둘은 관련이 없으며 $b의 값이 변경됩니다. . $a에는 영향을 미치지 않으며 $a 값의 변경은 $b에 영향을 미치지 않습니다.

PHP 복제 방법이란 무엇입니까?

권장: "PHP Video Tutorial"

PHP 객체 복제: __clone() 메소드

객체 복제: __clone() 메소드

특정 After 변수에 정수 $a를 할당할 때 $b, $b는 $a의 "사본"이지만 둘은 관련이 없습니다. $b 값의 변경은 $a에 영향을 주지 않으며 $a 값의 변경은 $b에 영향을 미치지 않습니다. 배열의 경우에도 마찬가지지만 객체의 경우에는 다릅니다. 객체 인스턴스 $a가 변수 $b에 할당되면 $b는 $a의 "복사본"이 아니라 값이 변경됩니다. $a에 영향을 미치고 $a의 값 변경은 $b에도 영향을 미칩니다.

예:

<?php
class Cat{
public  $name;
function __construct($name){
echo &#39;Cat类启动&#39;;
$this->name = $name;
}
function __destruct(){
echo &#39;Cat类结束&#39;;
}
}
$a = new Cat("默默");//实例化类,调用无参数的构造方法
//$c被销毁时自动调用析构方法
$b=$a;
echo "改变之前:<br>";
echo "a->name:".$a->name."<br>";
echo "b->name:".$b->name."<br>";
$a->name="琳琳";
echo "改变之后:<br>";
echo "a->name:".$a->name."<br>";
echo "b->name:".$b->name."<br>";
?>

실행 결과:

Cat 클래스는 변경 전에 시작됩니다:

a->name: Silent

b- >name: Silently

변경 후:

a->name: Linlin

b->name: Linlin

하지만 개체 인용뿐만 아니라 개체의 복사본이 필요한 경우가 많습니다. 이때 clone 키워드를 사용할 수 있지만 "cloned" 클래스 속성에 참조가 있으면 해당 참조가 유지됩니다. 즉, 복사본의 참조와 원본 클래스의 참조가 모두 유지됩니다. .

예:

<?php
class Cat{
public $name;
function __construct($name){
echo &#39;Cat类启动&#39;;
$this->name = $name;
}
function __destruct(){
echo &#39;Cat类结束&#39;;
}
}
$a = new Cat("默默");//实例化类,调用无参数的构造方法
//$c被销毁时自动调用析构方法
$b=clone $a;
echo "改变之前:<br>";
echo "a->name:".$a->name."<br>";
echo "b->name:".$b->name."<br>";
$a->name="琳琳";
echo "改变之后:<br>";
echo "a->name:".$a->name."<br>";
echo "b->name:".$b->name."<br>";
?>

작업 결과:

변경 전 Cat 클래스 시작:

a->name: 자동으로

b->name: 자동으로

변경 후:

a->name: Linlin

b->name: Silently

Cat 클래스 종료 Cat 클래스 종료

이 클래스의 $name 속성에는 참조가 부여되므로 clone 키워드를 사용하여 복사할 때 이름 "복사본"에서 "원본" $name은 동일한 변수를 가리킵니다

위 내용은 PHP 복제 방법이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.