Рубрики
Uncategorized

Аномалии в отсутствие конференции PHP Battle

Автор оригинала: David Wong.

Как глубокий php, если я хочу отключить ваш psp, это все равно, что сказать, что моя альма-матер бедна. Не теряйся из виду. Адрес личного блога: https://mengkang.net/1368.html

Начало истории

Просмотр журнала ошибок в эти дни обнаружил, что произошла десериализация данных уведомление Ошибка. На самом деле я считываю данные из кэша и десериализую их. Поскольку десериализация не удалась, я фактически каждый раз брал значение из базы данных. За этим по-прежнему стоит значительное влияние на производительность.

Аномалия отсутствия

Когда я впервые начал писать код, я не понимал, почему я использовал исключения, что я чувствовал. если еще Мы можем понять, почему нам нужно делать больше, чем это, но теперь мы чувствуем, что в php слишком мало исключений.

Сравнивая два сценария сериализации, один из них json Другой-это сериализация .

json

оставайтесь json кодировать/декодировать Когда возникает исключение, json_last_error () , чтобы получить его.

оставайтесь || json кодировать/декодировать || Когда возникает исключение, || json_last_error ()||, чтобы получить его.

Можно только сказать, что такой дизайн едва ли адекватен, не соответствует объектно-ориентированной рутине.

сериализация/несериализация

При использовании собственной сериализации и десериализации сравнение json Обработка проще и грубее, ни одна функция не может получить окончательную ошибку, только с помощью пользовательских. обработчик ошибок Взять на себя, а затем выполнить соответствующую обработку.

Зачем ловить исключения

Например, мой код неаккуратен, и некоторые ключи json Сериализация, некоторые ключи сериализация Это так. Мы можем сортировать ключи. Не гарантируется, что соответствующие отношения, которые настраивают другие, являются правильными, или что некоторые люди забывают, поэтому мне нужно идти до конца, фиксируя исключения, чтобы наш код был более надежным. Когда несериализуется После сбоя, мы можем попробовать. json_decode Вместо немедленного возврата false Для передачи запроса в базу данных.

Демонстрация кода

error_reporting(E_ALL);

$a = ["a" => 1];

class UnSerializeException extends ErrorException
{

}

set_error_handler(function ($severity, $message, $file, $line) {
    $info = explode(":", $message);

    if ($severity == E_NOTICE) {
        if ($info[0] == "unserialize()") {
            throw new UnSerializeException($message);
        }
        return true;
    } else {

        throw new ErrorException($message, 0, $severity, $file, $line);;
    }
});


try {
    $b = unserialize(json_encode($a));
} catch (ErrorException $exception) {
    Var_dump (get_class ($exception), $exception - > getMessage (), $exception - > getTraceAsString (); // captured
} finally {
    restore_error_handler();
}

try {
    $b = unserialize(json_encode($a));
} catch (ErrorException $exception) {
    Var_dump (get_class ($exception), $exception - > getMessage (), $exception - > getTraceAsString (); // Uncaptured
}

Выходные результаты

string(20) "UnSerializeException"
string(43) "unserialize(): Error at offset 0 of 7 bytes"
string(181) "#0 [internal function]: {closure}(8, 'unserialize(): ...', '/Users/mengkang...', 34, Array)
#1 /Users/mengkang/PhpstormProjects/xxx/test.php(34): unserialize('{"a":1}')
#2 {main}"

Notice: unserialize(): Error at offset 0 of 7 bytes in /Users/mengkang/PhpstormProjects/xxx/test.php on line 42

Постскриптум

Таким образом, дизайн исключений PHP-кода еще предстоит пройти долгий путь, и эти устоявшиеся “старые нормы” нуждаются в “мужестве”, чтобы свергнуть, в конце концов, затронут всех пользователей.

Во многих группах всегда есть чаты о языковых спорах. Обычно я просто смотрю на них и не участвую в них. Подобных примеров, слишком много, чтобы их упоминать, я продолжу выводить некоторые блоги на PHP, в надежде, что PHP-код будет более надежным и безопасным. Также надеюсь, что вы не только видите, как PHP работает быстро, быстро скрывается за многочисленными потенциальными рисками, PHP хорош, но и не может быть жадным.