* 객체 복사 및 복제
* 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 '<hr>';
에 개체 변수 이름 $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 '<hr>';
//$member2의 점수를 다시 확인하세요
echo $member2->score; //新值5000 echo '<hr>';
//생각해 보세요. 내 수정이 원래 $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 '<hr>'; echo $member3->score; //0,说明克隆魔术方法已经生效
위 내용은 PHP에서 객체 복사 및 복제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!