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

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

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

Интересный вариант :)

L0002 0000 ASSIGN CV0($status) string("silver")
L0004 0001 ASSIGN CV1($discountTiers) array(...)
L0010 0002 T5 = FETCH_DIM_IS CV1($discountTiers) CV0($status)
L0010 0003 T6 = COALESCE T5 0005
L0010 0004 T6 = QM_ASSIGN int(0)
L0010 0005 ASSIGN CV2($discount) T6

FETCH_DIM_IS - это тот же поиск в хеш-таблице, что и внутри SWITCH_STRING/MATCH.

По сути это самый прямой способ найти значение по ключу в хеш-таблице, а если нет - вот дефолт. Без обёрток, fallback-цепочек и break.

P.S.: Проверил на 50млн итераций - скорость ?? и match одинаковая (в рамках погрешностей).

Классный разбор! Особенно про 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() считает кодпоинты.С некоторыми наборами символов он тоже выдаст не то, "что видно на экране". Супер комментарий, спасибо!
Дополню статью.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

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

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