This version brings an important changes with the directive zend.exception_ignore_args set to On by default.
In all stack traces, the args key is now missing.
All php frameworks have to handle this to report errors & exceptions.
    Добавлен специальный опкод виртуальной машины для функции array_key_exists(),
    который улучшает производительность этой функции,
    если значение параметра может быть статически разрешено. В коде, использующем пространства имён,
    возможно потребуется использование абсолютного имени (\array_key_exists())
    либо же явный импорт функции.
   
    Когда функция preg_match() в режиме UTF-8 (модификатор "u")
    неоднократно вызывается для одной и той же строки (возможно, на различных позициях),
    проверка правильности UTF-8 будет выполнена только один раз.
   
zend.exception_ignore_args - новая INI-директива для включения или исключения аргументов из трассировок стека, полученных в исключениях.
opcache.preload_user - новая INI-директива для установки пользователя, из-под которого должен выполняться код предварительной загрузки, иначе это будет root (не допускается по соображениям безопасности).
   Множество модулей теперь используют исключительно pkg-config, чтобы определять зависимости библиотек.
   Как правило, это означает, что вместо
   --with-foo-dir=DIR используется только --with-foo.
   Пользовательские пути к библиотекам могут быть указаны либо путём добавления дополнительных каталогов
   в PKG_CONFIG_PATH, либо путём явного указания параметров компиляции
   через FOO_CFLAGS и FOO_LIBS.
  
Следующие модули и SAPI были затронуты этим изменением:
   fputcsv(),
   fgetcsv(),
   SplFileObject::fputcsv(),
   SplFileObject::fgetcsv() и
   SplFileObject::setCsvControl()
   теперь принимаем пустую строку в аргументе $escape.
   Это отключит проприетарный механизм экранирования PHP.
  
Поведение функции str_getcsv() было соответствующим образом скорректировано (ранее пустая строка была идентична использованию значения по умолчанию).
Метод SplFileObject::getCsvControl() теперь также может возвращать пустую строку для третьего элемента массива, соответственно.
Модуль filter больше не поддерживает ---with-pcre-dir для Unix-сборок и поэтому может быть спокойно собран для общего пользования с помощью ./configure.
Поведение функции imagecropauto() в встроенной библиотеке libgd было синхронизировано с системной библиотекой libgd:
IMG_CROP_DEFAULT в случае неудачного выполнения
     не заменяется на IMG_CROP_SIDES
    
   
   Значение по умолчанию $mode
   imagecropauto() было изменено на
   IMG_CROP_DEFAULT; передача -1
   теперь объявлена устаревшей.
  
   imagescale() теперь поддерживает масштабирование
   с сохранением соотношения сторон до фиксированной высоты
   при передаче -1
   в параметр $new_width.
  
Модуль hash больше нельзя отключить, теперь он является неотъемлемой частью любой PHP-сборки, подобно модулю date.
Модуль intl теперь требует как минимум ICU 50.1.
Класс ResourceBundle теперь реализует Countable.
Поддержка nsldap и umich_ldap была удалена.
Все модули на основе libxml теперь требуют libxml версии 2.7.6 или новее.
Библиотека oniguruma больше не идёт в комплекте с PHP, вместо неё в системе должна быть libonig. В качестве альтернативы можно указать ---disable-mbregex, чтобы отключить компонент mbregex.
Конфигурационные опции --disable-opcache-file и --enable-opcache-file удалены в пользу использования INI-директивы opcache.file_cache
   Функции password_hash() и password_needs_rehash()
   теперь принимают обнуляемую строку (string) и целое число (int) в аргументе $algo.
  
Установка PEAR (вместе с PECL) больше не включена по умолчанию. Её можно явно включить, используя --with-pear. Эта опция объявлена устаревшей и может быть удалена в будущем.
   Изменены числовые значения констант-модификаторов
   (IS_ABSTRACT,
   IS_DEPRECATED,
   IS_EXPLICIT_ABSTRACT,
   IS_FINAL,
   IS_IMPLICIT_ABSTRACT,
   IS_PRIVATE,
   IS_PROTECTED,
   IS_PUBLIC и
   IS_STATIC) в классах
   ReflectionClass,
   ReflectionFunction,
   ReflectionMethod,
   ReflectionObject и
   ReflectionProperty.
  
Класс SimpleXMLElement теперь реализует Countable.
Встроенная в сборке библиотека libsqlite удалена. Для сборки модуля SQLite3 теперь требуется libsqlite3 ≥ 3.7.4. Чтобы собрать модуль PDO_SQLite обязательно требуется libsqlite3 ≥ 3.5.0.
Сериализация и десериализация SQLite3, SQLite3Stmt и SQLite3Result теперь явно запрещены. Раньше сериализация экземпляров этих классов была возможна, но десериализация делала объекты неиспользуемыми для дальнейшей работы.
   Нотацию @param теперь также можно использовать для обозначения параметров SQL-запроса.
  
Встроенная библиотека libzip удалена. Теперь обязательно наличие в системе библиотеки libzip >= 0.11, чтобы собрать модуль zip.
This version brings an important changes with the directive zend.exception_ignore_args set to On by default.
In all stack traces, the args key is now missing.
All php frameworks have to handle this to report errors & exceptions.As of PHP 7.4, an exception thrown within the user-defined shutdown function can be caught by the user-defined exception handler.
<?php
    set_error_handler(
        function($level, $error, $file, $line){
            if(0 === error_reporting()){
                return false;
            }
            throw new ErrorException($error, -1, $level, $file, $line);
        },
        E_ALL
    );
    register_shutdown_function(function(){
        $error = error_get_last();
        if($error){
            throw new ErrorException($error['message'], -1, $error['type'], $error['file'], $error['line']);
        }
    });
    set_exception_handler(function($exception){
        // ... more code ...
    });   
   
    require 'NotExists.php';Note for internals/extensions:
Many opcode values changed between PHP 7.3 and 7.4, so most documentation resources are outdated in that regard. You can look the definitions at Zend/zend_vm_opcodes.h in php-src. For example, ZEND_ECHO changes from 40 to 136.
While opcode changes happen in a lot of PHP versions, the change in 7.4 is quite significant.