Как найти память, используемую объектом в PHP? (c's sizeof). Объект, о котором я хочу узнать, это словарь со строками и ints, поэтому его сложно вычислить вручную. Также строка в php может иметь разную длину в зависимости от кодировки (utf8 и т. Д.) Правильно?
Вы можете использовать memory_get_usage () .
Запустите его один раз перед созданием вашего объекта, затем снова после создания объекта и получите разницу между двумя результатами.
Чтобы получить представление о размере объектов, попробуйте
strlen(serialize($object));
Это отнюдь не точный, но простой способ получить число для сравнения.
Если вам нужно знать размер уже созданного объекта или массива, вы можете использовать следующий код, чтобы узнать его.
<?php function rec_copy($src) { if (is_string($src)) { return str_replace('SOME_NEVER_OCCURING_VALUE_145645645734534523', 'XYZ', $src); } if (is_numeric($src)) { return ($src + 0); } if (is_bool($src)) { return ($src?TRUE:FALSE); } if (is_null($src)) { return NULL; } if (is_object($src)) { $new = (object) array(); foreach ($src as $key => $val) { $new->$key = rec_copy($val); } return $new; } if (!is_array($src)) { print_r(gettype($src) . "\n"); return $src; } $new = array(); foreach ($src as $key => $val) { $new[$key] = rec_copy($val); } return $new; } $old = memory_get_usage(); $dummy = rec_copy($src); $mem = memory_get_usage(); $size = abs($mem - $old); ?>
Это по существу создает копию структуры массива и всех ее членов.
Не 100% точная, но все еще работающая версия также:
<?php $old = memory_get_usage(); $dummy = unserialize(serialize($src)); $mem = memory_get_usage(); $size = abs($mem - $old);
Надеюсь, что это поможет в случаях, когда объект уже построен.
Я не знаю, что есть простой способ получить размер объекта в PHP. Возможно, вам просто нужно выполнить алгоритм, который
Я уверен, что есть лучший способ, но это сработает, хотя это будет боль.