Обновить
33
Борис@Boris99999

Пользователь

24
Рейтинг
13
Подписчики
Отправить сообщение

Классный разбор! Особенно про GC_NOT_COLLECTABLE и превращение кейсов в константы с инстансами :)

Благодарю, поправил!

Давайте проверим. Простой скрипт, в котором массив увеличивается, а мы измеряем занимаемую память. Должны быть "прыжки" при выделении емкости.

<?php
$arr = [];
$prev = memory_get_usage();

echo "Элемент\tПамять\t\tДельта\n";
echo "==========================================\n";

for ($i = 0; $i < 100000; $i++) {
    $arr[] = $i;
    $curr = memory_get_usage();
    $delta = $curr - $prev;
    
    if ($delta > 0 && $i > 0) {
        echo "$i\t\t" . number_format($curr) . " B\t" . number_format($delta) . " B\n";
    }
    
    $prev = $curr;
}
?>

И вот ответ:

P.S.: Добавлю в статью. Полезно.

Отличный коммент :)

Вот тут даже интересно стало. "Многие" заведомо означает некоторые всё-таки можно. Это какие например?

Я не имею ввиду какие-то специфичные только для массивов функции. isset, empty and etc - применимо к любому типу, и к строкам, и к массивам... В json_encode можно передать и то, и другое, и получить преобразование.

Вопрос был на понимание строк. Да, условие не дает 100%-ой конкретики. Но может же быть вариант ответа "зависит от настроек/кодировок". И есть стандартные/распространенные настройки

Вы абсолютно правы, mb_strlen() считает кодпоинты.С некоторыми наборами символов он тоже выдаст не то, "что видно на экране". Супер комментарий, спасибо!
Дополню статью.

Информация

В рейтинге
337-й
Зарегистрирован
Активность

Специализация

Бэкенд разработчик
PHP