Как клонировать объект с переданными свойствами в PHP? Друзья, такой вопрос. Есть класс, позволяющий менять размер изображений (class.upload.php) добавлять фильтры и т.п.
Возникла потребность менять изображений разных размеров похожим образом.
Решение, которое реализовал, нахожу идиотским, потому что код повторяется причем тут же:$foo = new Upload($forResize);
$boo = 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';

$boo->image_ratio = true;
$boo->image_ratio_fill = true;
$boo->image_background_color= '#FFFFFF';
}
else
{
if($_POST['crop'] == "l" or $_POST['crop'] == "L" or $_POST['crop'] == "л" or $_POST['crop'] == "Л")
{
$foo->image_ratio_crop = 'L';

$boo->image_ratio_crop = 'L';
}
elseif($_POST['crop'] == "r" or $_POST['crop'] == "R" or $_POST['crop'] == "п" or $_POST['crop'] == "П")
{
$foo->image_ratio_crop = 'R';

$boo->image_ratio_crop = 'R';
}
else
{
$foo->image_ratio_crop = true;

$boo->image_ratio_crop = true;
}
}

$foo->image_y = 270;
$foo->image_x = 270;
$foo->Process($uploaddir."middle/");
$foo->processed;

$boo->file_new_name_body = $imagename;
$boo->image_resize = true;
$boo->image_y = 78;
$boo->image_x = 78;
$boo->Process($uploaddir."small/");
$boo->processed;
Думал сделать что-то типа:$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;
Но этот вариант не работает должным образом, переданные свойства объекту выше клонирования - у клона не обнаруживаются.
Как клонировать объект с переданными свойствами в PHP?

21 Авг 2019 в 07:05
226 +1
0
Ответы
1

Вы можете использовать магический метод __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 до клонирования.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир