PHP 객체지향 객체 복제 방법

巴扎黑
풀어 주다: 2023-03-07 14:14:02
원래의
1894명이 탐색했습니다.

우리는 전달 참조를 사용하여 객체를 호출할 때 실제 호출이 동일한 객체라는 것을 이미 알고 있었습니다. 때로는 원래 객체를 변경할 때 객체의 복사본을 생성해야 하는 경우도 있습니다. PHP에서는 현재 개체를 사용하여 동일한 개체를 복제할 수 있습니다. 복제된 복사본은 원본 두 개체와 완전히 독립적이며 서로 간섭하지 않습니다.

클론 사용법을 알아보기 위해 간단한 예를 들어보겠습니다.

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
protected $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;                               //将实例化的类再克隆出来一个
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();
로그인 후 복사

위 예의 결과는 모두 '야스오 미드라이너를 하고 싶다' 입니다.

위에서 복제된 복사본은 원본과 독립적이며 서로 간섭하지 않는다고 말했습니다. 이것은 무엇을 의미합니까?

몇 가지만 변경하면 여전히 위와 동일한 예입니다.

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
public $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;
$character2->location = &#39;上单&#39;;
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();
로그인 후 복사

위 예시의 결과는 '야스오 미드 라인을 하고 싶다', '야스오 탑 라인을 하고 싶다' 입니다.

예제에서 볼 수 있듯이 복제된 복사본과 원본 두 개체는 완전히 독립적이며 서로 간섭하지 않습니다.

__clone 사용

객체를 복제하고 싶을 뿐만 아니라 객체가 고유한 속성과 메서드를 갖기를 원하는 경우가 많습니다. 그런 다음 클래스에 __clone 메서드를 만들어야 합니다. 이 메서드는 직접 호출되지 않는다는 점에서 생성자 및 소멸자와 유사합니다.

위의 예를 예로 들어보겠습니다:

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
public $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function __clone(){
$this -> location = &#39;上单&#39;;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();
로그인 후 복사

__clone 메소드의 좋은 특징은 기본 동작을 사용하여 복사본을 생성한 후 호출할 수 있다는 것입니다. 변경하고 싶은 것을 변경할 수 있습니다.

__clone 메서드에 추가되는 가장 일반적인 기능은 참조로 처리되는 클래스 속성이 올바르게 복사되도록 하는 것입니다. 객체에 대한 참조가 포함된 클래스를 복제하려면 객체에 대한 두 번째 참조가 아닌 객체의 두 번째 복사본을 가져와야 할 수 있으므로 해당 코드를 __clone 메서드에 추가합니다.

위 내용은 PHP 객체지향 객체 복제 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿