Как клонировать объект с переданными свойствами в PHP? Друзья, такой вопрос. Есть класс, позволяющий менять размер изображений (class.upload.php) добавлять фильтры и т.п. Возникла потребность менять изображений разных размеров похожим образом. Решение, которое реализовал, нахожу идиотским, потому что код повторяется причем тут же:$foo = new Upload($forResize); $boo = new Upload($forResize); $foo->file_new_name_body = $imagename; $foo->image_resize = true;
$boo = clone $foo; $boo->image_y = 78; $boo->image_x = 78; $boo->Process($uploaddir."small/"); $boo->processed; Но этот вариант не работает должным образом, переданные свойства объекту выше клонирования - у клона не обнаруживаются. Как клонировать объект с переданными свойствами в PHP?
Вы можете использовать магический метод __clone() для клонирования объекта с переданными свойствами. В вашем классе Upload добавьте следующий метод:
public function __clone() { // Клонируем все свойства объекта foreach($this as $key => $value) { if(is_object($value)) { $this->$key = clone $this->$key; } } }
Теперь вы сможете клонировать объект Upload с переданными свойствами следующим образом:
Вы можете использовать магический метод __clone() для клонирования объекта с переданными свойствами. В вашем классе Upload добавьте следующий метод:
public function __clone() {// Клонируем все свойства объекта
foreach($this as $key => $value) {
if(is_object($value)) {
$this->$key = clone $this->$key;
}
}
}
Теперь вы сможете клонировать объект Upload с переданными свойствами следующим образом:
$foo = new Upload($forResize);$foo->file_new_name_body = $imagename;
$foo->image_resize = true;
if($_POST['bg'] == 1) {
$foo->image_ratio = true;
$foo->image_ratio_fill = true;
$foo->image_background_color = '#FFFFFF';
} else {
if($_POST['crop'] == "l" or $_POST['crop'] == "L" or $_POST['crop'] == "л" or $_POST['crop'] == "Л") {
$foo->image_ratio_crop = 'L';
} elseif($_POST['crop'] == "r" or $_POST['crop'] == "R" or $_POST['crop'] == "п" or $_POST['crop'] == "П") {
$foo->image_ratio_crop = 'R';
} else {
$foo->image_ratio_crop = true;
}
}
$foo->image_y = 270;
$foo->image_x = 270;
$foo->Process($uploaddir."middle/");
$foo->processed;
$boo = clone $foo;
$boo->image_y = 78;
$boo->image_x = 78;
$boo->Process($uploaddir."small/");
$boo->processed;
Теперь клонированный объект boo будет иметь все свойства, которые были у объекта foo до клонирования.