PHP > LIBRARY > object clone
 
PHP
Library
Tip&Tech
Q&A
 
PHP Function
phpschool
±×´©º¸µå
LIBRARY
  HOME > PHP > LIBRARY
 
object clone
ÀÛ¼ºÀÏ : 19-01-08
Á¶È¸ : 133  

Object clone

°´Ã¼¸¦ cloneÇϱâÀü¿¡ ±×³É ´Ù¸¥ À̸§ ÁöÁ¤ÇÏ¸é ¾î¶»°Ô µÇ´ÂÁö¸¦ »ìÆìº¸ÀÚ

<?php class User{ public $name; public $age; function __construct($name, $age){ $this->name = $name; $this->age = $age; } } $user1 = new User("Time", 27); $user2 = $user1; $user1->name = "Jake"; var_dump($user1); echo("<br/><br/>"); var_dump($user2); // object(User)#1 (2) { ["name"]=> string(4) "Jake" ["age"]=> int(27) } // object(User)#1 (2) { ["name"]=> string(4) "Jake" ["age"]=> int(27) } ?>

±×³É °´Ã¼ÀÇ º¯¼ö¸¦ copyÇϸé, µÑÀº °ªÀ» °øÀ¯Çϱ⠶§¹®¿¡ ÇϳªÀÇ °ªÀÌ ¹Ù²î¸é ´Ù¸¥ °Íµµ ¹Ù²ï´Ù.

¸¸¾à °´Ã¼¸¦ µ¶¸³ÀûÀ¸·Î °´Ã¼¸¦ º¹»çÇϰí ÀÌÈÄ¿¡´Â °ªÀ» °øÀ¯ÇÏÁö ¸øÇϵµ·Ï ÇϱâÀ§Çؼ± cloneÀ» ÀÌ¿ëÇÏ¸é µÊ

<?php class User{ public $name; public $age; function __construct($name, $age){ $this->name = $name; $this->age = $age; } } $user1 = new User("Time", 27); $user2 = clone $user1; //clone Ãß°¡ $user1->name = "Jake"; var_dump($user1); echo("<br/><br/>"); var_dump($user2); // object(User)#1 (2) { ["name"]=> string(4) "Jake" ["age"]=> int(27) } // object(User)#2 (2) { ["name"]=> string(4) "Time" ["age"]=> int(27) } ?>

Shallow clone

À§¿Í °°ÀÌ cloneÀ» ÀÌ¿ëÇØ¼­ °³Ã¼ÀÇ °ªÀ» clone ÇÒ ¶§, ¸¸¾à °ª Áß¿¡ °´Ã¼°¡ ÀÖ´Ù¸é(ÇÏÀ§¿¡), ÇÏÀ§ °´Ã¼ÀÇ °ªÀº µ¶¸³ÀûÀ¸·Î cloneµÇ´Â°Ô ¾Æ´Ï¶ó, °ª ÀÚü°¡ cloneµÇ±â ¶§¹®¿¡ Çϳª¸¦ ¹Ù²Ù¸é ´Ù¸¥ Çϳªµµ ¹Ù²ï´Ù

<?php class Job{ public $salary; function __construct($jobname){ $this->jobname = $jobname; } } class User{ public $name; public $age; function __construct($name, $age, $object){ $this->name = $name; $this->age = $age; $this->object = $object; } } $job = new Job("cop"); $user1 = new User("Tim", 27, $job); $user2 = clone $user1; $user1->name = "Jake"; $user2->object->jobname = "nurse"; var_dump($user1); // jobnameÀÌ nurse echo("<br/><br/>"); var_dump($user2); // jobnameÀÌ nurse //Çϳª¸¸ ¹Ù²ãÁáÀ½¿¡µµ µÑ ¸ðµÎÀÇ ÇÏÀ§°´Ã¼ °ªÀÌ ¹Ù²ñ ?>

Deep clone(magic method __clone())

magic method __cloneÀ» ÀÌ¿ëÇϸé, µ¶¸³ÀûÀ¸·Î °´Ã¼µµ cloneÇÒ ¼ö ÀÖ´Ù.

__cloneÀº cloneµÉ ¶§ ½ÇÇàµÇ´Â magic methodÀÌ´Ù

À§¿¡ user¿¡ function __clone¸¸ Ãß°¡ÇØÁÖ¸é µÊ

class User{ public $name; public $age; function __construct($name, $age, $object){ $this->name = $name; $this->age = $age; $this->object = $object; } function __clone(){ // function clone Ãß°¡ $this->object = clone $this->object; } }

$this ÀÌ¿ëÇØ¼­ clone object ÀÚµ¿È­Çϱâ

$this¿¡ Á¤ÀÇµÈ °ªÀÌ ¹è¿­·Î ÀúÀåµÇ´Â °É ÀÌ¿ëÇØ¼­, foreach¹®À¸·Î ÀÚµ¿È­ÇÑ´Ù

object(User)#3 (3) { ["name"]=> string(3) "Tim" ["age"]=> int(27) ["object"]=> object(Job)#4 (1) { ["jobname"]=> string(3) "cop" } } // ÀÌ·±½ÄÀ¸·Î $this¿¡ ÀúÀå µÊ


 
 

Total 77
¹øÈ£ Á¦   ¸ñ Á¶È¸
°øÁö php ¶óÀ̺귯¸® 393
77 ¸ÅÁ÷ÇØ½Ã(MAGIC HASHES) Ãë¾àÁ¡ 124
76 Trait 122
75    Trait 130
74 Overloading 128
73    Overloading 127
72 Type hinting/Type ¼³Á¤Çϱâ/Throw error 125
71    Type hinting/Type ¼³Á¤Çϱâ/Throw error 97
70    Type hinting/Type ¼³Á¤Çϱâ/Throw error 124
69 object clone 134
68    object clone 119
67 serialize / unserialize 117
66 spl_autoload_register(¿ÀÅä·Îµå) 110
65 window¿¡¼­ composer±ò±â 119
64 Exception/try/throw/catch 125
63 ErrorÀÇ Á¾·ù 123
62    ErrorÀÇ Á¾·ù 124
61    ErrorÀÇ Á¾·ù 124
60 eval 124
59 Magic_methods 127
58    Magic_methods 135
 1  2  3  4  
 
°³ÀÎȨÆäÀÌÁö ´ýº¡´åÄÄÀº ÇÁ·Î±×·¡¸Ó¿Í µðÀÚÀ̳ÊÀ§ÇÑ ITÄ¿¹Â´ÏƼ °ø°£ÀÔ´Ï´Ù.
Copyright ¨Ï www.dumbung.com. All rights reserved.