>백엔드 개발 >PHP 문제 >PHP 클론 키워드를 사용하는 방법

PHP 클론 키워드를 사용하는 방법

青灯夜游
青灯夜游원래의
2021-07-23 19:44:292005검색

PHP에서는 복제 키워드를 사용하여 객체를 복제할 수 있습니다. 구문 형식은 "복제 객체 이름 = 복제 원본 객체 이름;"입니다. 객체가 성공적으로 복제된 후에는 해당 멤버 메서드, 속성 및 값이 정확히 일치합니다. 동일합니다. 복제된 사본의 구성원 속성을 재할당하려면 "__clone()" 메서드를 사용하면 됩니다.

PHP 클론 키워드를 사용하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP 복제 키워드(복제 개체)

PHP의 개체 모델은 참조로 개체를 호출합니다. 그러나 개체의 복사본을 만들어야 하는 경우도 있고 원본 개체를 변경할 때 개체 복사본에 영향을 주고 싶지 않은 경우도 있습니다. new 키워드를 사용하여 개체를 다시 만든 다음 속성에 동일한 값을 할당하면 번거롭고 오류가 발생하기 쉽습니다. PHP에서는 기존 객체를 기반으로 동일한 객체를 복제할 수 있으며, 복제 후 원본 객체와 복사 객체는 완전히 독립되어 서로 간섭하지 않습니다.

PHP에서는 clone 키워드를 사용하여 객체를 복제할 수 있습니다. 구문 형식은 다음과 같습니다.

克隆对象名称 = clone 原对象名称;

clone 메소드는 실제로 전체 객체의 메모리 영역을 복사하고 새 객체 변수를 사용하여 새 메모리를 가리키기 때문입니다. 따라서 할당 후 개체와 원본 개체는 서로 독립적입니다.

객체가 성공적으로 복제된 후에는 해당 멤버 메서드, 속성 및 값이 완전히 동일합니다. 복제된 사본의 구성원 속성을 재할당하려면 __clone() 메서드를 사용할 수 있습니다.

【예제】 다음은 clone 키워드의 사용을 보여주기 위해 간단한 예를 사용합니다.

<?php
    class Website{
        public $name, $url;
        public function __construct($name, $url){
            $this -> name = $name;
            $this -> url  = $url;
        }
        public function output(){
            echo $this -> name.&#39;,&#39;.$this -> url.&#39;<br>&#39;;
        }
    }
    $obj  = new Website(&#39;PHP中文网&#39;, &#39;https://www.php.cn/&#39;);
    $obj2 = clone $obj;
    $obj  -> output();
    $obj2 -> output();
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    var_dump($obj);
    var_dump($obj2);
?>

실행 결과는 다음과 같습니다.

PHP中文网,https://www.php.cn/
PHP中文网,https://www.php.cn/
object(Website)#1 (2) {
  ["name"]=>
  string(16) "PHP中文网"
  ["url"]=>
  string(27) "https://www.php.cn/"
}
object(Website)#2 (2) {
  ["name"]=>
  string(16) "PHP中文网"
  ["url"]=>
  string(27) "https://www.php.cn/"
}

참고: =를 사용하여 개체를 변수에 할당하면 개체에 대한 참조가 됩니다. 이 변수를 통해 속성 값을 변경하면 됩니다. 원본 개체에 영향을 미칩니다.

__clone() 매직 메서드

__clone() 메서드는 직접 호출할 수 없습니다. 객체가 clone 키워드를 통해 복제된 경우에만 해당 객체를 사용하여 __clone() 메서드를 호출할 수 있습니다. 객체의 복사본을 생성할 때 PHP는 __clone() 메서드가 존재하는지 확인합니다. 존재하지 않는 경우 기본 __clone() 메서드를 호출하여 객체의 모든 속성을 복사합니다. __clone() 메서드가 정의된 경우 __clone() 메서드는 새 개체의 속성을 설정합니다. 따라서 __clone() 메서드에서는 변경해야 하는 속성만 재정의하면 됩니다.

__clone() 메서드에는 매개 변수가 필요하지 않습니다. 다음은 설명하는 예입니다.

<?php
    class Website{
        public $name, $url;
        public function __construct($name, $url){
            $this -> name = $name;
            $this -> url  = $url;
        }
        public function output(){
            echo $this -> name.&#39;,&#39;.$this -> url.&#39;<br>&#39;;
        }
        public function __clone(){
            $this -> name = &#39;PHP教程&#39;;
            $this -> url  = &#39;https://www.php.cn/&#39;;
        }
    }
    $obj  = new Website(&#39;PHP中文网&#39;, &#39;https://www.php.cn/&#39;);
    $obj2 = clone $obj;
    $obj  -> output();
    $obj2 -> output();
?>

실행 결과는 다음과 같습니다.

PHP中文网,https://www.php.cn/
PHP教程,https://www.php.cn/

팁: 클래스에 빈 항목이 설정된 경우 액세스 권한이 부여됩니다. 비공개(private) __clone() 메서드는 복제를 비활성화할 수 있습니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP 클론 키워드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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