PHP에서 객체 복사 및 복제

无忌哥哥
풀어 주다: 2023-04-01 21:20:02
원래의
2396명이 탐색했습니다.

* 객체 복사 및 복제

* 1. 기본적으로 객체는 참조로 전달됩니다(실제로는 객체 식별자의 복사본이며 나중에 자세히 설명합니다)

* 2. 즉, 두 객체 변수 실제로는 동일한 객체에 대한 참조입니다

* 3. 새 객체를 생성하려면 clone 키워드를 사용하여 현재 객체를 복제해야 합니다

* 4. clone 키워드 사용 시 __clone()이 있는 경우

* 5. __clone() 메소드는 새로 생성된 객체에서 실행됩니다

* 6. __clone() 메소드는 복사할 대상과 복제 시 완료할 기본 작업을 제어할 수 있습니다

class Member
{
    //声明三个私有属性
    private $name;  //会员名
    private $email; //会员邮箱
    private $score; //会员积分
    
    //构造方法
    public function __construct($name='',$email='',$score=0)
    {
        $this->name = $name;
        $this->email = $email;
        $this->score = $score;
    }
    
    //查询器(暂时省略访问控制)
    public function __get($name)
    {
        return $this->$name;
    }
    
    //设置器(暂时省略访问控制)
    public function __set($name,$value)
    {
        $this->$name = $value;
    }
    
    //克隆魔术方法在对象克隆时自动调用,针对新对象进行初始化操作
    public function __clone()
    {
        $this->score = 0;
    }
    
}
로그인 후 복사

// 멤버 클래스 Member 인스턴스화, 멤버 객체 생성 $member

$member = new Member('peter','peter@php.cn',1000);
로그인 후 복사

//액세스 테스트

echo $member->score;
로그인 후 복사
로그인 후 복사
로그인 후 복사

//멤버 객체 복사

$member1 = $member;
로그인 후 복사

//새 변수 이름 $member1을 사용하여 객체 정보 업데이트

$member1->score = 2000;
로그인 후 복사

//new 사용 액세스

echo $member1->score;
echo &#39;<hr>&#39;;
로그인 후 복사

에 개체 변수 이름 $member1//원래 개체 이름 $member를 사용하여

echo $member->score;
로그인 후 복사
로그인 후 복사
로그인 후 복사

에 액세스 * 결론:

* 1. 새로운 변수 수정 결과가 원래 개체 변수에 반영됩니다

* 2 . 이 두 변수는 실제로 동일한 객체를 가리킨다는 점을 설명하세요

* 3. 즉, 객체는 기본적으로 참조로 전달됩니다

* 4. 즉, 두 번째 변수 이름인 $member1은 의 별칭일 뿐입니다. 원래 변수이고 새 개체가 생성되지 않습니다

* 5. 그냥 원본 개체의 식별자에 대한 새 이름일 뿐이라고 이해하면 됩니다.

var_dump($member1);  //对象id=1
var_dump($member);   //对象id=1
로그인 후 복사

//$member1과 $member는 두 개의 동일한 개체라는 설명, 그냥 다른 이름으로

//완전히 새로운 객체를 생성하려면 어떻게 해야 할까요? clone

$member2 = clone $member;
로그인 후 복사

//먼저 객체 변수 $member2

echo $member2->score; //目前是原始值2000
로그인 후 복사
의 점수 속성 값을 확인하겠습니다.

//점수 값 수정

$member2->score = 5000;
echo &#39;<hr>&#39;;
로그인 후 복사

//$member2의 점수를 다시 확인하세요

echo $member2->score; //新值5000
echo &#39;<hr>&#39;;
로그인 후 복사

//생각해 보세요. 내 수정이 원래 $member 변수의 점수 속성 값에 영향을 미치나요?

echo $member->score; //发现原对象的score属性值仍为2000,未发生变化
로그인 후 복사

//왜 이것은 복제 기술을 사용하여 두 개의 완전히 다른 객체 변수를 생성했기 때문입니다

//아래에서 확인하세요

var_dump($member); //变量id是1
var_dump($member2); //变量id是2
로그인 후 복사

//이 두 객체 변수의 ID가 다르므로 완전히 다른 두 객체임을 나타냅니다.

//그러한 것을 완료하세요 아래 작업: 새 멤버 객체를 생성할 때 멤버의 포인트를 0으로 지우려면 어떻게 해야 할까요?

//복제된 새 객체를 전처리하려면 Member 클래스에 __clone() 복제 매직 메소드를 생성하세요

// 다시 한번 시연해 보세요

//현재 포인트를 확인하세요

echo $member->score;
로그인 후 복사
로그인 후 복사
로그인 후 복사

//복제하여 새로운 개체 $member3

$member3 = clone $member;
로그인 후 복사

//새 개체 $member3의 점수 값을 확인하여 수업에 __clone()이 있는지 확인하세요. 효과가 있나요?

echo &#39;<hr>&#39;;
echo $member3->score; //0,说明克隆魔术方法已经生效
로그인 후 복사

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!