Код: Выделить всё
Код: Выделить всё
__set()
И есть фрагмент кода (который встроен в гораздо большую часть программного обеспечения):
Код: Выделить всё
try {
var_dump(memory_get_usage());
echo "
";
$e = new MyException();
var_dump(memory_get_usage());
echo "
";
throw $e;
}
catch (\Throwable) {
var_dump(memory_get_usage());
echo "
";
var_dump(get_class($e));
echo "
";
unset($e);
var_dump(memory_get_usage());
}
Код: Выделить всё
contextlevel.php:408: int(3207080)
contextlevel.php:411: int(3216336)
contextlevel.php:416: int(3473200)
contextlevel.php:418: string(11) "MyException"
contextlevel.php:421: int(3463904)
Если я удалю (нерелевантный __set ) выдача исключения по-прежнему требует много памяти, но теперь она освобождается с помощью unset($e). Почему? (Посмотрите на общее изменение объема памяти — всего лишь за счет удаления неиспользуемого метода защиты!)
Код: Выделить всё
contextlevel.php:408: int(2042552)
contextlevel.php:411: int(2051776)
contextlevel.php:416: int(2309016)
contextlevel.php:418: string(11) "MyException"
contextlevel.php:421: int(2057712)
Я могу и, конечно, откажусь от __get(), и, таким образом, проблема, которую я не смог правильно описать вчера, должна решить. Но все же мне было бы интересно, почему это происходит. Есть идеи?
Подробнее здесь: https://stackoverflow.com/questions/786 ... orting-set