우리는 전달 참조를 사용하여 객체를 호출할 때 실제 호출이 동일한 객체라는 것을 이미 알고 있었습니다. 때로는 원래 객체를 변경할 때 객체의 복사본을 생성해야 하는 경우도 있습니다. 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 '我要玩' . $this->name.$this->location; } } $character1 = new Character('亚索','中单'); //实例化一个类 $character2 = clone $character1; //将实例化的类再克隆出来一个 $character1->play(); //调用方法执行 echo '<br/>'; $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 '我要玩' . $this->name.$this->location; } } $character1 = new Character('亚索','中单'); //实例化一个类 $character2 = clone $character1; $character2->location = '上单'; $character1->play(); //调用方法执行 echo '<br/>'; $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 = '上单'; } function play(){ //创建方法 echo '我要玩' . $this->name.$this->location; } } $character1 = new Character('亚索','中单'); //实例化一个类 $character2 = clone $character1; $character1->play(); //调用方法执行 echo '<br/>'; $character2->play();
__clone 메소드의 좋은 특징은 기본 동작을 사용하여 복사본을 생성한 후 호출할 수 있다는 것입니다. 변경하고 싶은 것을 변경할 수 있습니다.
__clone 메서드에 추가되는 가장 일반적인 기능은 참조로 처리되는 클래스 속성이 올바르게 복사되도록 하는 것입니다. 객체에 대한 참조가 포함된 클래스를 복제하려면 객체에 대한 두 번째 참조가 아닌 객체의 두 번째 복사본을 가져와야 할 수 있으므로 해당 코드를 __clone 메서드에 추가합니다.
위 내용은 PHP 객체지향 객체 복제 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!