Нововведения разных версий PHP
5.5
-
Генераторы и корутины
-
Ключевое слово
finally
-
Password Hashing API — правильный способ хешировать пароли из коробки
-
array/string dereferencing, например, можно получить элемент массива сразу момент его объявления
echo [1, 2, 3][0];
, аналогично со строкамиecho 'PHP'[0];
-
Теперь можно получить имя класса используя ключевое слово ::class
-
empty()
можно применять к результатам функций или выражений без необходимости сохранять этот результат в отдельную переменную -
foreach
теперь может работать с ключами не скалярного типа. В обычных PHP массивах таких ключей быть не может, но если вы используетеforeach
для обхода по собственно написанному итератору, то теперь вы можете возвращать любой тип вIterator::key()
Zend Optimiser+ был включён в состав дистрибутива как расширение OPcache extension. Впрочем, это расширение было доступно и раньше для PHP 5.2, 5.3 и 5.4 для ручной установки.
-
Обновлена библиотека GD, в частности появилась поддержа WebP
5.6
- Скалярные выражения в константах
- Функции с переменным числом аргументов при помощи оператора
...
- Оператор возведения в степень
**
- Импорт функций и констант при помощи ключевого слова use
- В ядро включен интерактивный отладчик phpdbg.
- Разрешено повторное использование php://input, а $HTTP_RAW_POST_DATA объявлена устаревшей
- GMP-объекты теперь поддерживают перегрузку операторов
- Поддержка загрузки файлов больше 2 Гб
7.0
- возможность обработки исключения, вместо фатальной ошибки
- новые операторы сравнения ( <=>, ?? и другие)
- анонимные классы
- указание типа возвращаемого значения (return type declaration)
- группировка для оператора use
- работа с замыканиями (closure)
- скалярные типы аргументов функции (scalar type hints)
- опционально доступный «строгий режим» работы с типами (stitict mode)
- изменена трактовка переменных и выражений
- улучшена работа с генераторами ( ключевое слово yield from и другие изменения )
- конструктор класса в стиле php4 (когда имя класса совпадает с именем метод) теперь генерирует E_DEPRECATED и будет удален в php8
- изменено поведение побитовых операторов <<, >> и других
- изменено поведение функций funct_get_args и funct_get_arg
- функция языка unserialize принимает дополнительный аргумент
- функция языка list изменила поведение
- изменено поведение цикла foreach (например в работе с внутренним итератором)
- новый синтаксис unicode последовательностей
7.1
- возвращаемый тип void
- псевдотип iterable
- null в типизированных и возвращаемых параметрах
- возможность использовать отрицательное значение для смещения в строках
- разрешено использовать строковые ключи в конструкци
- конвертация callable выражений в замыкание
- Поддержка модификаторов видимости для констант класса
- Ловить исключения можно объединяя несколько типов исключений в один блок
7.2
- Добавлена возможность загружать расширения по имени
- Добавлена возможность перегружать абстрактные функции(Liskov)
- Запрещено number_format() возвращать -0
- Добавлена возможность конвертировать нумерованные ключи при приведении типов object/array
- Запрещено передавать null в качестве параметра для get_class()
- Вызов Count с параметром, который нельзя посчитать
- Возможность расширения типа параметра
- Добавлена возможность указывать запятую в конце группированных неймспейсов
- Реализовано семейство функций socket_getaddrinfo
- Улучшены TLS-константы
- Object typehint
- LDAP EXOP
- В ядро PHP добавлена Libsodium
- Добавлен алгоритм Argon2 в хешировании пароля
- HashContext as Object
- Добавлен отладчик PDO Prepared statements
- Добавлен отладчик PDO Prepared statements v2
- Расширенные типы строк для PDO
- Добавлены опции JSON_INVALID_UTF8_IGNORE и JSON_INVALID_UTF8_SUBSTITUTE
Магические методы PHP
- __construct() — метод конструктор, если он объявлен в классе то он будет вызываться при каждом создании объекта. Может принимать одно или несколько свойств.
- __destruct() — деструктор вызывается при освобождении всех ссылок на объект в котором он находится или по завершению работы скрипта. Не может принимать свойства.
- __get() — будет выполнен при чтении данных из недоступных свойств.
- __set() — будет выполнен при записи данных в недоступные свойства.
- __isset() будет выполнен при использовании isset() или empty() на недоступных свойствах.
- __unset() — будет выполнен при вызове unset() на недоступном свойстве.
- __call() — данный метод вызывается при вызове недоступных методов класса.
- __callStatic() —данный метод вызывается при вызове недоступных методов класса в статическом контексте.
- __toString() — позволяет написать реакцию класса при возведении его в строку.
- __invoke() — вызывается когда скрипт выполняет объект как функцию.
- __clone() — клонирует объект.
- __sleep() — метод вызывается перед выполнением функции serialize().
- __wakeup() — метод вызывается перед выполнением функции unserialize()
- __set_state() — этот статический метод вызывается для тех классов, которые экспортируются функцией var_export()
- __debugInfo() — метод вызывается функцией var_dump(), когда необходимо вывести список свойств объекта. Если этот метод не определен, тогда будут выведены все свойства объекта c модификаторами public, protected и private.