Заглянем в википедию (1):

PHP/FI

В 1994 году датский программист (ныне живущий в Канаде) Расмус Лердорф (Rasmus Lerdorf) создал набор CGI-скриптов на языке программирования C для вывода и учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML-документов.

Лердорф назвал набор Personal Home Page (Личная Домашняя Страница), но более часто упоминалось название «PHP Tools». Вскоре функциональности перестало хватать, и Расмус переписал PHP Tools, создав более крупную и богатую реализацию.

В июне 1995 года Расмус открыл исходный код PHP Tools общественности, что позволило разработчикам использовать его по своему усмотрению. Это также дало возможность пользователям исправлять ошибки в коде и улучшать его.

PHP 2

В 1997 году после длительного бета-тестирования вышла вторая версия обработчика, написанного на C — PHP/FI 2.0. Её использовали около 1 % (приблизительно 50 тысяч) всех интернет-доменов мира.

PHP 3

Версия PHP 3.0 подверглась значительной переработке, определившей современный облик и стиль языка программирования. В 1997 году два израильских программиста, Энди Гутманс (Andi Gutmans) и Зеев Сураски (Zeev Suraski), разработчики из израильского технологического института, расположенного в израильском городе Хайфе, полностью переписали код интерпретатора.

PHP/FI 2.0 был сочтён ими непригодным для разработки приложения электронной коммерции, над которым они в то время работали. Для совместной работы над PHP 3.0 с помощью базы разработчиков PHP/FI 2.0 Энди, Расмус и Зеев решили объединиться и объявить PHP 3.0 официальным преемником PHP/FI, разработка же PHP/FI была практически полностью прекращена. После 9 месяцев публичного тестирования PHP 3.0 был официально выпущен в июне 1998 года.

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

Абсолютно новый язык программирования получил новое имя. Разработчики отказались от дополнения о персональном использовании, которое имелось в аббревиатуре PHP/FI и язык был переименован в PHP.

К концу 1998 года PHP использовался десятками тысяч пользователей. Сотни тысяч веб-сайтов сообщали об использовании языка программирования PHP. В то время PHP 3.0 был установлен приблизительно на 10 % веб-серверов Интернета.

PHP 4

К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зив Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Расширения дали PHP 3.0 возможность успешно работать с набором баз данных и поддерживать большое количество различных API и протоколов, но PHP 3.0 не имел качественной поддержки модулей и приложения работали неэффективно.

Новый движок, названный Zend Engine (от имён создателей, Зива и Энди, также основателей Zend Technologies), успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принёсший с собой набор дополнительных функций, официально вышел в мае 2000 года, почти через два года после выхода своего предшественника PHP 3.0. В дополнение к улучшению производительности, PHP 4.0 имел ещё несколько ключевых нововведений, таких как:

  • повышенное быстродействие

  • поддержка сессий,

  • буферизация вывода (стало можно направлять в специальный временный буфер)

  • более безопасные способы обработки вводимой пользователем информации

    • дополнительная обработка пользовательского ввода ради безопасности работы

  • и несколько новых языковых конструкций.

Прекращение выпуска обновлений PHP 4 было запланировано на конец 2007 года. Однако вплоть до 8 августа 2008 года выпускались критические обновления безопасности. С 9 августа 2008 года всякая поддержка версии PHP 4.x была прекращена. Она подстегнула развитие многих проектов, включая популярный движок блогов WordPress и другие системы управления контентом сайта. (2)

PHP 5

Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП, которые стали во многом схожи с моделью, используемой в Java.

В частности, введён деструктор, открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. Нововведения, однако, были сделаны с расчётом сохранить наибольшую совместимость с кодом на предыдущих версиях языка. На данный момент последней стабильной веткой является PHP 5.6, которая содержит ряд изменений и дополнений:

  • Увеличена скорость работы, примерно на 10-20%

  • Введено пространство имён

  • Позднее статическое связывание и специальный метод __callStatic()

  • Лямбда-функции и замыкания

  • Добавление расширений: intl, phar, fileinfo и sqlite3

  • Опциональный сборщик мусора

  • Был написан драйвер MySQLnd для самой популярной у PHP разработчиков базы данных MySQL. С появлением нативного драйвера скорость работы с Mysql значительно увеличилась, также новый драйвер доступен уже в стандартной сборке (ранее это было невозможно из-за лицензии, связанной с libmysql)

  • Отмена поддержки версий операционной системы до Windows 2000 (Windows 98, NT4, и.т.д.)

  • Новые синтаксические конструкции, такие как NOWDOC, ограниченный GOTO, короткий вид тернарного оператора «?:»

  • и другое …

Подробнее о версиях 5.ч (2):

Версия 5.0

Параллельно с поддержкой прошлой версии в июле 2004 года была выпущена 5-я версия языка. Фактически она вывела PHP на новый уровень, поскольку вобрала в себя внушительное число элементов «настоящего» ООП:

  • доступ к частям кода стал управляться модификаторами private/public/protected;

  • для корректировки хода выполнения программы появились исключения;

  • для уничтожения объекта и освобождения областей памяти добавили деструктор и т.д.

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

  • Также язык дополнили «магическими» методами __get и __set. Их секрет заключается в выполнении интерпретатором неочевидных действий в нужное время, так что программист может положиться на эту «магию» и заниматься другим кодом.

Версии 5.1 и 5.2

В 2006-2009 годах язык еще чуть поменялся. «Магических» методов стало чуть больше, средства для связи с базой данных (PDO) стали включенными по умолчанию. Для работы с JSON ввели функцию json_encode. Кроме того, удалось исправить много ошибок, внесенных предыдущими версиями.

Версия 5.3

2009 год – год выхода очередной минорной версии – для PHP ознаменовался введением пространства имен. Это позволило удобно группировать и разграничивать имена переменных, что стимулировало разработку программистами различных библиотек для повторного использования. Ненаписанных хоть кем-то когда-то алгоритмов становилось все меньше. Интересно, что тогда же в язык добавили оператор goto.

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

Версия 5.4

В 2012 году язык потерял одну из своих старых особенностей – магические кавычки. Этот элемент обеспечивал автоматическое экранирование (специфическую обработку) входных данных. Теперь хорошим тоном стало самостоятельно реализовывать требуемую обработку в явном виде.

Из нововведений интересны примеси – механизм, благодаря которому объект может получить признаки от множества других объектов.

Кроме того, язык стал короче: стало можно использовать форма записи массива [1, 2] вместо старого Array (1, 2).

Версия 5.5

Годом позже язык еще раз поменялся. В частности, появился блок finally, который будет отрабатывать независимо от появления исключений, а имя классов стало можно получать с его пространством имен при помощи конструкции ::class.

Версия 5.6

С 2014 года PHP позволяет написать функцию с переменным числом параметров. Кроме того, стало возможным конструировать константы из выражений.

PHP 6

Шестая версия PHP находилась в стадии разработки с октября 2006 года. В ней уже было сделано множество нововведений, как, например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, magic_quotes_gpc и register_globals из конфигурационного файла php.ini.

Основные усилия были сосредоточены на поддержке Юникода / UTF-16. Однако в марте 2010 года разработка PHP6 была признана бесперспективной из-за сложностей с поддержкой Юникода.

Исходный код PHP6 перемещён на ветвь, а основной линией разработки стала версия 5.4.

PHP 7

В 2014 году было проведено голосование, по результатам которого следующая версия получила название PHP 7. Выход новой версии планировался в середине октября 2015 года. В марте 2015 года Zend представили инфографику, в которой описаны основные нововведения PHP 7.

3 декабря 2015 года было объявлено о выходе PHP версии 7.0.0.

Новая версия основывается на экспериментальной ветви PHP, которая изначально называлась phpng (PHP Next Generation — следующее поколение), и разрабатывалась с упором на увеличение производительности и уменьшение потребления памяти.

В новой версии:

  • добавлена возможность указывать тип возвращаемых из функции данных,

  • добавлен контроль передаваемых типов для данных

    • усилился контроль типов – в него добавили string, int и др.;

  • количество магии снизилось

  • добавлены новые операторы.

PHP 8

07.01.2020 вышла новая стабильная версия PHP 8 (8.0.1).

Ниже — вкратце о новых функциях и возможностях в сравнении с версией PHP 7.

PHP 8 стал еще более быстрым и надежным. По сравнению с версией PHP 7 появилось множество новых и полезных вещей, которые обязательно будут востребованы пользователями. Рассмотрим подробнее эти нововведения.

Типы Union 2.0 (Объединенные типы)

Существует множество случаев, когда использование типов объединения может быть полезным. Вместо аннотаций PHPDoc для объединенных типов теперь вы можете использовать объявления union type, которые проверяются сразу во время выполнения.

Union Types — это совокупность двух или более типов, которые указывают, что вы можете использовать любой из них.

JIT – компилятор

JIT (Just In Time — «в нужный момент») — это динамическая компиляция байт кода в машинный. JIT компилятор значительно улучшает производительность работы программ. Проверка на синтетических бенчмарках показывает улучшение производительности примерно в 3 раза и в 1,5–2 раза для некоторых долго работающих приложений.

В JIT код переводится сначала в промежуточное представление и только потом в машинный код. То есть, выполняется непосредственно на процессоре, а не на виртуальной машине Zend VM.

JIT реализован как независимая часть OPcache. Его можно включать / отключать во время компиляции или выполнения скрипта.

Использование ::class для объектов

В PHP 8 теперь вы можете использовать ::class для объектов вместо того, чтобы использовать get_class() как раньше. Работает точно так же, как и get_class().

Атрибуты

В PHP 8 теперь вместо аннотаций PHPDoc вы можете использовать структурные метаданные с нативным синтаксисом PHP.

Выражение Match

В PHP 8 новое выражение match похоже на оператор switch, но имеет свои особенности:

  • Match — это выражение и его результат может быть сохранён в переменной или возвращён.

  • Условия match поддерживают только однострочные выражения, для которых не требуется управляющая конструкция break;

Выражение match использует строгое сравнение.

Оператор Nullsafe

В PHP 8 теперь вместо проверки на null вы можете использовать последовательность вызовов с новым оператором Nullsafe. Если один из элементов в последовательности возвращает null, то выполнение прерывается и вся последовательность возвращает null.

Улучшенное сравнение строк и чисел

Теперь при сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае число преобразуется в строку и используется сравнение строк.

Ошибки согласованности типов для встроенных функций

В PHP 8 большинство внутренних функций теперь выбрасывают исключение Error, если при проверке параметра возникает ошибка.

Именованные аргументы

В PHP 8 теперь можно:

  • Указывать только необходимые параметры и пропускать необязательные.

  • Порядок аргументов не важен, аргументы самодокументируемы.

Объявление свойств в конструкторе

В новой версии PHP 8 теперь используется гораздо меньше шаблонного кода для определения и инициализации свойств.

Новый тип возврата static

Ранее в PHP уже были возвращаемые типы — self и parent, но static не был допустимым типом возврата для этого языка программирования. Теперь есть.

Throw-выражения

В PHP оператор throw не может создавать исключения там, где были разрешены только выражения, например стрелочные функции, оператор объединения и тернарный оператор.

В новом PHP 8 теперь вы можете преобразовывать инструкцию throw в выражение.

Weak maps

Weak maps — это набор объектов, на которые в коде слабо ссылаются ключи, что может привести к их удалению сборщиками мусора. В PHP 8 добавлен класс WeakMaps для создания сохранения ссылки на объект. При этом она не препятствует удалению самого объекта.

Завершающая запятая в списках параметров

Ранее при вызове функции в списках параметров отсутствовала поддержка запятой. В PHP 8 теперь это разрешено.

Новый Stringable интерфейс

В PHP 8 теперь вы можете использовать интерфейс Stringable для аннотации типов или имплементации метода __toString (). И больше нет необходимости реализовывать его вручную.

Новые функции в PHP 8

  • get_debug_type() — возвращает тип переменной. В отличии от gettype() возвращает более полезный вывод для массивов, строк, анонимных классов и объектов.

  • str_starts_with() — проверяет, начинается ли строка с определенной строки. Возвращает TRUE / FALSE.

  • str_ends_with() — проверяет, заканчивается ли строка с определенной строки. Возвращает TRUE / FALSE.

  • str_contains() — проверяет, содержит ли строка другую строку.

  • fdiv() — эта функция похожа на fmod() и intdiv(), что позволяет делить на 0. Но вместо ошибок получаем INF, -INF или NAN, в зависимости от случая.

  • get_resource_id() — ранее ресурсам присваивается идентификатор, но для этого необходимо было преобразование ресурса в int. В PHP 8 добавлена функция get_resource_id(), что делает эту операцию более очевидной и безопасной для типов.


Источники:

(1) https://ru.wikipedia.org/wiki/%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_PHP

(2) https://blog.pro-site.org/2016/12/14/evolyuciya-yazyka-php/

(3) https://jehost.ru/poleznaya-informatsiya/chto-novogo-v-php-8-sravnenie-s-php-7.html

Tags

Нет комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.