Клонировать объект PHP и изменить защищенное свойство клонаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Клонировать объект PHP и изменить защищенное свойство клона

Сообщение Anonymous »

У меня есть объект, представляющий результат вычисления. Он также сохраняет время () потребовалось для вычисления этого результата.
В некоторых случаях быстрее клонировать предыдущий объект, чем пересчитывать все заново (например, когда одни и те же входные параметры дают тот же результат).
Однако при клонировании объекта нельзя копировать[/b]. Клонированный объект должен иметь новое значение времени выполнения, основанное на времени, которое потребовалось для определения возможности повторного использования того же результата.
Вот упрощенный пример:

Код: Выделить всё

class Object
{
protected $runtime;

public function getRuntime()
{
return $this->runtime;
}

public function doSome(/*...*/)
{
$start = microtime(true);
// ... the heavy work ...
// ...
$this->runtime = microtime(true) - $start;
}
}

$objects = [];
while (/*...*/) {
if (count($objects) > 0) {
$start = microtime(true);
if (/*check if would get the same result as the previous one*/) {
$object = clone end($objects);
// MUST change the runtime here on the clone
// but i should not make :runtime public
$object->runtime = microtime(true) - $start; // :(
$objects[] = $object;
continue;
}
}
$object = new Object();
$object->doSome(/*...*/);
$objects[] = $object;
}
Как клонировать предыдущий объект и обновить значение защищенной среды выполнения в клоне, не делая это свойство общедоступным?


Подробнее здесь: https://stackoverflow.com/questions/490 ... -the-clone
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»