Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

PHP история и основы серверного языка

Лекция



Привет, Вы узнаете о том , что такое php, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое php , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .

PHP — это язык сценариев общего назначения , ориентированный на веб-разработку . Первоначально он был создан датско-канадским программистом Расмусом Лердорфом в 1993 году и выпущен в 1995 году. Эталонная реализация PHP в настоящее время производится PHP Group. PHP изначально был аббревиатурой от Personal Home Page , , но теперь он обозначает рекурсивный бэкроним PHP: Hypertext Preprocessor

PHP-код обычно обрабатывается на веб-сервере интерпретатором PHP, реализованным как модуль , демон или исполняемый файл Common Gateway Interface (CGI). На веб-сервере результат интерпретированного и выполненного PHP-кода, который может быть любым типом данных, например, сгенерированным HTML или двоичными данными изображения, будет формировать весь HTTP- ответ или его часть. Существуют различные системы веб-шаблонов , системы управления веб- контентом и веб-фреймворки , которые можно использовать для организации или упрощения генерации этого ответа. Кроме того, PHP можно использовать для многих задач программирования вне веб-контекста, таких как автономные графические приложения и управление дронами . PHP-код также можно выполнять напрямую из командной строки .

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

Язык PHP развивался без письменной формальной спецификации или стандарта, при этом изначальная реализация выступала в качестве фактического стандарта, которому стремились следовать другие реализации.

W3Techs сообщает, что по состоянию на 27 октября 2024 года (примерно через два года после прекращения поддержки PHP 7 и через 11 месяцев после выпуска PHP 8.3) PHP 7 по-прежнему используется на 50,0% веб-сайтов PHP, который устарел и, как известно, небезопасен. Кроме того, 13,2% веб-сайтов PHP используют еще более устаревшую (не поддерживается более 5 лет) и небезопасную версию PHP 5, а более не поддерживаемая версия PHP 8.0 также очень популярна, поэтому большинство веб-сайтов PHP не используют поддерживаемые версии.

История

PHP история и основы серверного языка PHP история и основы серверного языка PHP история и основы серверного языка
Расмус Лердорф , создатель PHP; и Энди Гутманс и Зеев Сураски , создатели Zend Engine

Ранняя история

Разработка PHP началась в 1993 году , когда Расмус Лердорф написал несколько программ Common Gateway Interface (CGI) на языке C , которые он использовал для поддержки своей личной домашней страницы . Он расширил их для работы с веб-формами и взаимодействия с базами данных и назвал эту реализацию «Персональной домашней страницей/Интерпретатором форм» (Personal Home Page/Forms Interpreter), или PHP/FI.

Пример раннего синтаксиса PHP :

  PHP история и основы серверного языка
 

PHP/FI можно было использовать для создания простых динамических веб-приложений . Чтобы ускорить отправку сообщений об ошибках и улучшить код, Лердорф первоначально объявил о выпуске PHP/FI под названием «Personal Home Page Tools (PHP Tools) версии 1.0» в дискуссионной группе Usenet comp.infosystems.www.authoring.cgi 8 июня 1995 года. Этот выпуск включал базовые функции, такие как переменные в стиле Perl , обработка форм и возможность встраивания HTML . К этому моменту синтаксис изменился, напоминая Perl , но стал проще, ограниченнее и менее последовательным.

Ранний PHP никогда не ставил перед собой задачу стать новым языком программирования ; скорее, он развивался органически, и Лердорф, оглядываясь назад, отмечал: «Я не знаю, как это остановить [...] никогда не было никакого намерения написать язык программирования [...] Я совершенно не представляю, как написать язык программирования [...] Я просто продолжал добавлять следующий логический шаг по пути». Начала формироваться команда разработчиков, и после месяцев работы и бета- тестирования в ноябре 1997 года был официально выпущен PHP/FI 2.

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

PHP 3 и 4

Зеев Сураски и Энди Гутманс переписали парсер в 1997 году и сформировали основу PHP 3, изменив название языка на рекурсивную аббревиатуру PHP: Hypertext Preprocessor . После этого началось публичное тестирование PHP 3, а официальный запуск состоялся в июне 1998 года. Затем Сураски и Гутманс начали новую переписку ядра PHP, создав Zend Engine в 1999 году. Они также основали Zend Technologies в Рамат-Гане , Израиль .

22 мая 2000 года был выпущен PHP 4 на базе Zend Engine 1.0. К августу 2008 года эта версия достигла версии 4.4.9. В настоящее время PHP 4 больше не находится в разработке, и выпуск каких-либо обновлений безопасности не планируется

PHP 5

1 июля 2004 года был выпущен PHP 5 на базе нового Zend Engine II. PHP 5 включал новые функции, такие как улучшенная поддержка объектно-ориентированного программирования , расширение PHP Data Objects (PDO) (определяющее легкий и последовательный интерфейс для доступа к базам данных), а также многочисленные улучшения производительности. В 2008 году PHP 5 стал единственной стабильной версией, находящейся в разработке. Позднее статическое связывание отсутствовало в предыдущих версиях PHP и было добавлено в версии 5.3.

Многие известные проекты с открытым исходным кодом прекратили поддержку PHP 4 в новом коде с 5 февраля 2008 года из-за инициативы GoPHP5 , представленной консорциумом разработчиков PHP, продвигающим переход с PHP 4 на PHP 5.

Со временем интерпретаторы PHP стали доступны в большинстве существующих 32- и 64-разрядных операционных систем, либо путем их сборки из исходного кода PHP, либо с помощью готовых двоичных файлов. [ Для версий PHP 5.3 и 5.4 единственными доступными двоичными дистрибутивами Microsoft Windows были 32-разрядные сборки IA-32 , требующие режима совместимости с 32-разрядной версией Windows при использовании служб Internet Information Services (IIS) на 64-разрядной платформе Windows. Версия PHP 5.5 сделала 64-разрядные сборки x86-64 доступными для Microsoft Windows.

Официальная поддержка безопасности PHP 5.6 завершилась 31 декабря 2018 года.

PHP 6 и Юникод

PHP получил смешанные отзывы из-за отсутствия встроенной поддержки Unicode на уровне ядра языка. В 2005 году был инициирован проект под руководством Андрея Змиевского с целью внедрения встроенной поддержки Unicode в PHP путем встраивания библиотеки International Components for Unicode (ICU) и представления текстовых строк как UTF-16 внутри. Поскольку это привело бы к серьезным изменениям как во внутренних компонентах языка, так и в пользовательском коде, планировалось выпустить ее как версию 6.0 языка вместе с другими основными функциями, находившимися в то время в разработке.

Однако нехватка разработчиков, понимавших необходимые изменения, и проблемы с производительностью, возникающие при преобразовании в UTF-16 и обратно, которая редко используется в веб-контексте, привели к задержкам в проекте. В результате в 2009 году был создан релиз PHP 5.3, в котором многие не-Unicode функции были перенесены из PHP 6, в частности пространства имен. В марте 2010 года проект в его текущем виде был официально закрыт, и был подготовлен релиз PHP 5.4, содержащий большинство оставшихся не-Unicode функций из PHP 6, таких как черты и повторное связывание замыканий. Первоначально надеялись, что будет сформирован новый план для интеграции Unicode, но к 2014 году ничего не было принято.

PHP 7

В 2014 и 2015 годах была разработана новая основная версия PHP — PHP 7. Нумерация этой версии вызвала некоторые дебаты среди внутренних разработчиков. Хотя эксперименты PHP 6 Unicode никогда не были опубликованы, несколько статей и названий книг ссылались на название PHP 6, что могло вызвать путаницу, если бы в новой версии это название было использовано повторно. После голосования было выбрано название PHP 7.

Основой PHP 7 является ветвь PHP , которая изначально называлась PHP следующего поколения ( phpng ). Она была написана Дмитрием Стоговым, Синьченом Хуэем и Никитой Поповым и направлена ​​на оптимизацию производительности PHP путем рефакторинга Zend Engine с сохранением практически полной языковой совместимости. К 14 июля 2014 года тесты на базе WordPress , которые служили основным набором тестов для проекта phpng, показали почти 100%-ный рост производительности. Изменения от phpng упрощают повышение производительности в будущих версиях, поскольку более компактные структуры данных и другие изменения считаются более подходящими для успешной миграции на JIT -компилятор. Из-за существенных изменений переработанный Zend Engine получил название Zend Engine 3 , придя на смену Zend Engine 2, используемому в PHP 5.

Из-за крупных внутренних изменений в phpng он должен получить новый основной номер версии PHP, а не второстепенный релиз PHP 5, согласно процессу выпуска PHP. Основные версии PHP могут нарушать обратную совместимость кода, и поэтому PHP 7 предоставил возможность для других улучшений за пределами phpng, которые требуют нарушений обратной совместимости. В частности, были внесены следующие изменения:

  • Многие устаревшие механизмы обработки критических или восстанавливаемых ошибок PHP были заменены современными объектно-ориентированными исключениями .
  • Синтаксис разыменования переменных был переработан, чтобы стать внутренне более последовательным и полным, что позволяет использовать операторы ->, [], (), {}, и ::с произвольными осмысленными выражениями левой стороны.
  • Поведение оператора foreachбыло изменено, чтобы стать более предсказуемым.
  • Конструкторы для нескольких классов, встроенных в PHP, которые возвращали значение null при ошибке, были изменены так, чтобы вместо этого выдавать исключение для обеспечения согласованности.
  • Из ядра PHP были удалены несколько неподдерживаемых или устаревших интерфейсов программирования серверных приложений (SAPI) и расширений, в частности устаревшее mysqlрасширение.
  • Поведение оператора list()было изменено, чтобы исключить поддержку строк.
  • Поддержка устаревших разделителей в стиле ASP <%и %>.
  • Исправлена ​​ошибка, из-за которой оператор switch мог иметь несколько пунктов. default
  • Поддержка шестнадцатеричных чисел в некоторых неявных преобразованиях из строк в числовые типы была удалена.
  • Операторы сдвига влево и вправо были изменены для обеспечения более единообразного поведения на разных платформах.
  • Преобразования между числами с плавающей точкой и целыми числами были изменены (например, бесконечность была преобразована в ноль) и реализованы более согласованно на разных платформах.

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

PHP 8

PHP 8 был выпущен 26 ноября 2020 года. PHP 8 является основной версией и содержит существенные изменения по сравнению с предыдущими версиями Новые функции и важные изменения включают в себя:

Компиляция точно в срок

Компиляция JIT поддерживается в PHP 8.

Компилятор JIT PHP 8 может обеспечить существенное повышение производительности в некоторых случаях использования , PHP-разработчик Никита Попов заявил, что повышение производительности для большинства веб-сайтов будет менее существенным, чем при обновлении с PHP 5 до PHP 7. Ожидается, что существенные улучшения будут больше касаться математических операций, чем обычных случаев веб-разработки. Кроме того, компилятор JIT обеспечивает будущий потенциал для переноса части кода с C на PHP из-за повышения производительности в некоторых случаях использования.

Добавление выражения соответствия

matchЭто выражение появилось в PHP 8. Выражение match концептуально похоже на switchоператор и в некоторых случаях является более компактным. Поскольку matchэто выражение, его результат может быть присвоен переменной или возвращен из функции.

Изменения и дополнения типа

В PHP 8 появились типы объединения, новый static тип возврата и новый mixed тип.

В PHP 8 были добавлены «атрибуты», которые в других языках программирования часто называют «аннотациями», что позволяет добавлять метаданные к классам

throwбыл изменен с утверждения на выражение. Это позволяет создавать исключения в местах, которые ранее были невозможны.

Изменения и дополнения синтаксиса

В PHP 8 внесены изменения, позволяющие использовать альтернативные, более лаконичные или более согласованные синтаксисы в ряде сценариев. Например, оператор nullsafe похож на оператор объединения null ?? , но используется при вызове методов. Следующий фрагмент кода не вызовет ошибку, если getBirthday()возвращает null:

 PHP история и основы серверного языка

Добавлено продвижение свойств конструктора в качестве « синтаксического сахара », позволяющего автоматически устанавливать свойства класса при передаче параметров в конструктор класса . Это сокращает объем шаблонного кода , который необходимо написать.

Другие незначительные изменения включают поддержку использования ::classon объектов, которая служит альтернативой использованию get_class(); не захватывающих перехватов в блоках try-catch; корректировки синтаксиса переменных для устранения несоответствий; поддержку именованных аргументов; и поддержку конечных запятых в списках параметров, что добавляет согласованности с поддержкой конечных запятых в других контекстах, например, в массивах

Изменения и дополнения стандартной библиотеки

  • Слабые карты были добавлены в PHP 8. A WeakMapсодержит ссылки на объекты, но эти ссылки не мешают таким объектам быть удаленными сборщиком мусора Это может обеспечить повышение производительности в сценариях, где данные кэшируются ; это особенно актуально для объектно-реляционных отображений (ORM).
  • Различные изменения в интерфейсах, такие как добавление поддержки создания DateTimeобъектов из интерфейсов и добавление Stringableинтерфейса, который можно использовать для подсказки типов.
  • Различные новые функции, включая , str_contains()str_starts_with()str_ends_with() fdiv()get_debug_type()get_resource_id()
  • Объектная реализация token_get_all()

Дополнительные изменения

  • Аннотации типов были также добавлены в исходный код PHP C, чтобы позволить внутренним функциям и методам иметь «полную информацию о типах в отражении».
  • Наследование с помощью закрытых методов
  • Абстрактные методы улучшения характеристик

PHP 8.1

PHP 8.1 был выпущен 25 ноября 2021 года. Об этом говорит сайт https://intellect.icu . В нем добавлена ​​поддержка перечислений (также называемых «enums»), объявление свойств как readonly(что предотвращает изменение свойства после инициализации) и распаковка массивов со строковыми ключами. Новый тип never можно использовать для указания того, что функция не возвращает значение.

PHP 8.2

PHP 8.2 был выпущен 8 декабря 2022 года. Новым в этом выпуске являются readonlyклассы (свойства экземпляров которых неявно доступны только для чтения), типы дизъюнктивной нормальной формы (DNF) и randomрасширение, которое предоставляет генератор псевдослучайных чисел с объектно-ориентированным API , редактирование значений конфиденциальных параметров и множество других функций.

PHP 8.3

PHP 8.3 был выпущен 23 ноября 2023 года. В этом выпуске появились свойства массива, доступные только для чтения, что позволило объявлять массивы неизменяемыми после инициализации. Также была добавлена ​​поддержка псевдонимов классов для встроенных классов PHP, новые методы генерации случайных чисел с плавающей точкой в ​​расширении Random и улучшены настройки PHP INI с поддержкой резервных значений. Кроме того, новая функция stream_context_set_options предоставляет улучшенный API для управления потоками, помимо прочих обновлений и упразднений.

PHP 8.4

PHP 8.4 был выпущен 21 ноября 2024 года.

История релизов

Начиная с 28 июня 2011 года, команда разработчиков PHP внедрила график выпуска новых версий PHP. В рамках этой системы должен выпускаться как минимум один релиз каждый месяц. Раз в год должен выпускаться дополнительный релиз, который может включать новые функции. Каждый дополнительный релиз должен поддерживаться как минимум два года исправлениями безопасности и ошибок, а затем как минимум один год только исправлениями безопасности, что в общей сложности составляет трехлетний период выпуска каждого дополнительного релиза. В течение трехлетнего периода выпуска в дополнительный релиз не должны добавляться никакие новые функции, за исключением небольших и самостоятельных. В RFC 2024 продлен срок действия периода исправлений безопасности до двух лет, все даты окончания жизненного цикла установлены на 31 декабря и удалено исключение, допускающее добавление «небольших и самостоятельных» функций в патч-версиях.

Талисман

PHP история и основы серверного языка

ElePHPant, талисман PHP

Талисманом проекта PHP является elePHPant , синий слон с логотипом PHP на боку, созданный Винсентом Понтье в 1998 году. «Буквы (PHP) образовывали форму слона, если смотреть на них сбоку».

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

Синтаксис

Следующая программа «Hello, World!» написана на PHP-коде, встроенном в HTML- документ:

PHP история и основы серверного языка 

Однако, поскольку не существует требования о том, чтобы PHP-код был встроен в HTML, простейшая версия Hello, World! может быть записана следующим образом, при этом закрывающий тег ?>может быть опущен, что предпочтительно в файлах, содержащих чистый PHP-код.

 echo  'Привет, мир!' ;

Интерпретатор PHP выполняет только PHP-код внутри разделителей . Все, что находится за пределами разделителей, PHP не обрабатывает, хотя текст, не относящийся к PHP, по-прежнему подчиняется управляющим структурам, описанным в PHP-коде. Наиболее распространенные разделители используются для открытия и ?>закрытия разделов PHP. Существует также сокращенная форма . Этот короткий разделитель делает файлы скриптов менее переносимыми, поскольку его поддержку можно отключить в локальной конфигурации PHP, и поэтому его использование не рекомендуется. И наоборот, нет никаких рекомендаций против короткого тега echo . До PHP 5.4.0 этот сокращенный синтаксис echoработал только при short_open_tagвключенной настройке конфигурации, тогда как в PHP 5.4.0 и более поздних версиях он доступен всегда. Цель всех этих разделителей — отделить PHP-код от содержимого, не относящегося к PHP, такого как код JavaScript или HTML-разметка. Таким образом, самый короткий «Hello, World!» Программа , написанная на PHP:

 PHP история и основы серверного языка

Первая форма разделителей, и ?>, в XHTML и других XML- документах создает правильно сформированные инструкции по обработке XML. Это означает, что полученная смесь PHP-кода и другой разметки в файле на стороне сервера сама по себе является правильно сформированным XML.

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

Ниже приведен пример объявления и инициализации переменных PHP.


    $name  =  'John' ;   // переменная типа string объявляется и инициализируется 
    $age  =  18 ;        // переменная типа integer объявляется и инициализируется 
    $height  =  5.3 ;    // переменная типа double объявляется и инициализируется 
    echo  $name  .  ' is '  .  $height  .  "m tall \n " ;  // объединение переменных и строк 
    echo  " $name is $age years old." ;  // интерполяция переменных в строку 
 

В отличие от имен функций и классов, имена переменных чувствительны к регистру. Как строки в двойных кавычках (""), так и строки heredoc позволяют вставлять значение переменной в строку. PHP обрабатывает символы переноса строки как пробелы , как в языке свободной формы , а операторы завершаются точкой с запятой. В PHP существует три типа синтаксиса комментариев : /* */блочные и внутристрочные комментарии; //используются #для однострочных комментариев. Оператор echo— один из нескольких инструментов, предоставляемых PHP для вывода текста.

С точки зрения ключевых слов и синтаксиса языка PHP похож на синтаксис языка C. ifУсловия, forциклы whileи возвраты функций похожи по синтаксису на такие языки, как C, C++, C#, Java и Perl.

Типы данных PHP

PHP — язык со слабой типизацией . Он хранит целые числа в платформенно-зависимом диапазоне, как 32-, 64- или 128-битные знаковые целые числа , эквивалентные типу long в языке C. Беззнаковые целые числа преобразуются в знаковые в определенных ситуациях, что отличается от поведения многих других языков программирования. Целочисленные переменные можно присваивать в десятичной (положительной и отрицательной), восьмеричной , шестнадцатеричной и двоичной системах счисления.

Числа с плавающей точкой также хранятся в платформенно-зависимом диапазоне. Их можно задавать с помощью нотации с плавающей точкой или двух форм научной нотации . В PHP есть собственный тип Boolean , аналогичный собственным типам Boolean в Java и C++ . Согласно правилам преобразования булевых типов, ненулевые значения интерпретируются как true, а нуль — как false, как в Perl и C++.

Тип данных null представляет собой переменную, не имеющую значения; NULLэто единственное допустимое значение для этого типа данных.

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

Массивы могут содержать элементы любого типа, поддерживаемого PHP, включая ресурсы, объекты и даже другие массивы. Порядок сохраняется в списках значений и в хэшах , содержащих как ключи, так и значения, и их можно смешивать. PHP также поддерживает строки , которые можно использовать с одинарными и двойными кавычками, а также с синтаксисом nowdoc или heredoc

Стандартная библиотека PHP (SPL) пытается решить стандартные проблемы и реализует эффективные интерфейсы и классы доступа к данным.

Функции PHP

PHP определяет большой массив функций в основном языке, и многие из них также доступны в различных расширениях; эти функции хорошо документированы в онлайн- документации PHP . Однако встроенная библиотека имеет широкий спектр соглашений об именовании и связанных с ними несоответствий, как описано в разделе «История» выше.

Разработчик может определить пользовательские функции:

function  myAge ( int  $birthYear ) :  string 
{ 
    // вычислить возраст, вычитая год рождения из текущего года. 
    $yearsOld  =  date ( 'Y' )  -  $birthYear ; 

    // вернуть возраст в виде описательной строки. 
    return  $yearsOld  .  ( $yearsOld  ==  1  ?  ' year'  :  ' years' ); 
} 

echo  'Мне сейчас '  .  myAge ( 1995 )  .  ' old.' ;

По состоянию на 2035 год результатом работы вышеуказанной программы будет: «Мне сейчас 40 лет».

Вместо указателей на функции в PHP на функции можно ссылаться строкой, содержащей их имя. Таким образом, обычные функции PHP могут использоваться, например, в качестве обратных вызовов или в таблицах функций . Пользовательские функции могут быть созданы в любое время без прототипирования . Функции могут быть определены внутри блоков кода, что позволяет во время выполнения принимать решение о том, следует ли определять функцию. Существует function_existsфункция, которая определяет, была ли уже определена функция с заданным именем. Вызовы функций должны содержать скобки, за исключением функций конструктора класса с нулевым аргументом , вызываемых с помощью оператора PHP new, в этом случае скобки необязательны.

Начиная с PHP 4.0.1 create_function(), тонкая обертка вокруг [ eval()], позволяла создавать обычные PHP-функции во время выполнения программы; она была объявлена ​​устаревшей в PHP 7.2 и удалена в PHP 8.0 в пользу синтаксиса анонимных функций или « замыканий » , которые могут захватывать переменные из окружающей области видимости, что было добавлено в PHP 5.3. Синтаксис сокращенных стрелок был добавлен в PHP 7.4:

function  getAdder ( $x )  { 
    return  fn ( $y )  =>  $x  +  $y ; 
} 

$adder  =  getAdder ( 8 ); 
echo  $adder ( 2 );   // выводит "10"

В приведенном выше примере getAdder()функция создает замыкание, используя переданный аргумент $x, который принимает дополнительный аргумент $yи возвращает созданное замыкание вызывающей стороне. Такая функция является объектом первого класса, то есть ее можно сохранить в переменной, передать в качестве параметра другим функциям и т. д.

Что необычно для динамически типизированного языка, PHP поддерживает объявления типов для параметров функций, которые применяются во время выполнения. Это поддерживается для классов и интерфейсов с версии PHP 5.0, для массивов с версии PHP 5.1, для вызываемых объектов с версии PHP 5.4 и для скалярных типов (целых, с плавающей точкой, строк и логических) с версии PHP 7.0. В PHP 7.0 также есть объявления типов для возвращаемых функций, которые задаются путем указания имени типа после списка параметров с двоеточием перед ним. Например, getAdderфункция из предыдущего примера в PHP 7 может быть аннотирована типами следующим образом:

function  getAdder ( int  $x ) :  Closure 
{ 
    return  fn ( int  $y ) :  int  =>  $x  +  $y ; 
} 

$adder  =  getAdder ( 8 ); 
echo  $adder ( 2 );  // выводит "10" 
echo  $adder ( null );  // выдает исключение, так как был передан неверный тип 
$adder  =  getAdder ([]);  // также выдаст исключение

По умолчанию объявления скалярных типов следуют принципам слабой типизации. Так, например, если тип параметра — int, PHP разрешит передачу в эту функцию не только целых чисел, но и преобразуемых числовых строк, чисел с плавающей точкой или логических значений, и выполнит их преобразование. Однако в PHP 7 есть режим «строгой типизации», который при использовании запрещает такие преобразования для вызовов функций и возвратов внутри файла.

PHP-объекты

Базовая функциональность объектно-ориентированного программирования была добавлена ​​в PHP 3 и улучшена в PHP 4. Это позволило PHP получить дополнительную абстракцию, упростив творческие задачи для программистов, использующих этот язык. Обработка объектов была полностью переписана для PHP 5, что расширило набор функций и повысило производительность. В предыдущих версиях PHP объекты обрабатывались как типы значений . Недостатком этого метода было то, что коду приходилось активно использовать «ссылочные» переменные PHP, если он хотел изменить переданный объект, а не создать его копию. В новом подходе объекты ссылаются по дескриптору , а не по значению.

PHP 5 представил закрытые и защищенные переменные-члены и методы, наряду с абстрактными классами , окончательными классами , абстрактными методами и окончательными методами . Он также представил стандартный способ объявления конструкторов и деструкторов , аналогичный другим объектно-ориентированным языкам, таким как C++ , и стандартную модель обработки исключений . Кроме того, PHP 5 добавил интерфейсы и позволил реализовать несколько интерфейсов. Существуют специальные интерфейсы, которые позволяют объектам взаимодействовать с системой выполнения. Объекты , реализующие ArrayAccess, можно использовать с синтаксисом массивов , а объекты, реализующие Iterator или IteratorAggregate, можно использовать с foreach языковой конструкцией . В движке нет функции виртуальных таблиц , поэтому статические переменные связываются с именем, а не со ссылкой во время компиляции.

Если разработчик создает копию объекта, используя зарезервированное слово clone, движок Zend проверит, __clone()определен ли метод. Если нет, он вызовет метод по умолчанию __clone(), который скопирует свойства объекта. Если __clone()метод определен, он будет отвечать за установку необходимых свойств в созданном объекте. Для удобства движок предоставит функцию, импортирующую свойства исходного объекта, чтобы программист мог начать с копии исходного объекта по значению и переопределить только те свойства, которые необходимо изменить.

Видимость свойств и методов PHP определяется ключевыми словами , и . Значение по умолчанию — public, если используется только var ; является синонимом . Объявленные элементы доступны отовсюду. ограничивает доступ к унаследованным классам (и классу, определяющему элемент). ограничивает видимость только классом, определяющим элемент. Объекты одного типа имеют доступ к закрытым и защищенным членам друг друга, даже если они не являются одним и тем же экземпляром.

Реализации

Единственная полная реализация PHP — это оригинальная, известная просто как PHP. Она наиболее широко используется и основана на движке Zend Engine . Чтобы отличить ее от других реализаций, ее иногда неофициально называют «Zend PHP». Zend Engine компилирует исходный код PHP «на лету» во внутренний формат, который он может выполнить, таким образом, работая как интерпретатор . Она также является «эталонной реализацией» PHP, поскольку у PHP нет формальной спецификации, и поэтому семантика Zend PHP определяет семантику PHP. Из-за сложной и многогранной семантики PHP, определяемой принципами работы Zend, конкурирующим реализациям сложно обеспечить полную совместимость.

Модель PHP с одним запросом на выполнение скрипта и тот факт, что Zend Engine является интерпретатором, приводят к неэффективности; в результате были разработаны различные продукты для повышения производительности PHP. Чтобы ускорить выполнение и избежать необходимости компилировать исходный код PHP при каждом обращении к веб-странице, PHP-скрипты также могут быть развернуты во внутреннем формате движка PHP с помощью кэша опкодов , который работает путем кэширования скомпилированной формы PHP-скрипта (опкодов) в общей памяти , чтобы избежать накладных расходов на парсинг и компиляцию кода при каждом запуске скрипта. Кэш опкодов, Zend Opcache , встроен в PHP, начиная с версии 5.5. Другим примером широко используемого кэша опкодов является альтернативный PHP-кэш (APC), который доступен как расширение PECL .

Хотя Zend PHP по-прежнему остается самой популярной реализацией, было разработано несколько других. Некоторые из них являются компиляторами или поддерживают JIT-компиляцию , что обеспечивает более высокую производительность по сравнению с Zend PHP за счет отсутствия полной совместимости с PHP. Альтернативные реализации включают в себя:

  • HHVM (виртуальная машина HipHop) — разработанная в Facebook и доступная с открытым исходным кодом, она преобразует PHP-код в высокоуровневый байт-код (обычно называемый промежуточным языком ), который затем динамически транслируется в машинный код x86-64 во время выполнения с помощью компилятора «на лету» (JIT), что приводит к повышению производительности до 6 раз. [ 243 ] Однако, начиная с версии 7.2, Zend превзошел HHVM, [ 244 ] а HHVM 3.24 — последняя версия, официально поддерживающая PHP.
    • HipHop – разработан в Facebook и доступен с открытым исходным кодом. Он преобразует PHP-скрипты в код C++ , а затем компилирует полученный код, снижая нагрузку на сервер до 50%. В начале 2013 года Facebook отказался от него в пользу HHVM по нескольким причинам, включая сложности развертывания и отсутствие поддержки всего языка PHP, включая конструкции create_function()и eval(). [ 246 ]
  • Parrot — виртуальная машина, предназначенная для эффективного запуска динамических языков; кросс-транслятор Pipp преобразует исходный код PHP в промежуточное представление Parrot , которое затем транслируется в байт-код Parrot и выполняется виртуальной машиной.
  • PeachPie – компилятор второго поколения для байт-кода . NET Common Intermediate Language (CIL), построенный на платформе Roslyn ; преемник Phalanger, использующий несколько общих архитектурных компонентов.
  • Phalanger – компилирует PHP в байт-код .Net Common Intermediate Language; предшественник PeachPie
  • Quercus – компилирует PHP в байт-код Java

Лицензирование

PHP — это свободное программное обеспечение , выпущенное по лицензии PHP , которая гласит:

Продукты, созданные на основе этого программного обеспечения, не могут называться «PHP», а также слово «PHP» не может присутствовать в их названии без предварительного письменного разрешения group@php.net. Вы можете указать, что ваше программное обеспечение работает с PHP, указав « Foo for PHP» вместо «PHP Foo» или «phpfoo».

Это ограничение на использование «PHP» делает лицензию PHP несовместимой с лицензией GNU General Public License (GPL), в то время как лицензия Zend несовместима из-за пункта о рекламе, аналогичного пункту исходной лицензии BSD .

Развитие и сообщество

PHP включает в себя различные бесплатные библиотеки с открытым исходным кодом в исходном дистрибутиве или использует их в готовых сборках бинарных файлов PHP. PHP — это, по сути, интернет -система со встроенными модулями для доступа к FTP-серверам и многим серверам баз данных, включая PostgreSQL , MySQL , Microsoft SQL Server и SQLite (встроенную базу данных), LDAP -серверы и другие. Многочисленные функции, знакомые программистам на C, например, функции семейства stdio , доступны в стандартных сборках PHP.

PHP позволяет разработчикам писать расширения на языке C для добавления функциональности в язык PHP. Расширения PHP могут быть статически скомпилированы в PHP или динамически загружены во время выполнения. Было написано множество расширений для добавления поддержки Windows API , управления процессами в Unix-подобных операционных системах , многобайтовых строк ( Unicode ), cURL и нескольких популярных форматов сжатия . Другие возможности PHP, доступные через расширения, включают интеграцию с Internet Relay Chat (IRC), динамическую генерацию изображений и контента Adobe Flash , объекты данных PHP (PDO) в качестве уровня абстракции, используемого для доступа к базам данных, и даже синтез речи . Некоторые из оновных функций языка, например, работающие со строками и массивами, также реализованы в виде расширений. Проект PHP Extension Community Library (PECL) представляет собой репозиторий расширений языка PHP.

Некоторые другие проекты, такие как Zephir , предоставляют возможность создавать расширения PHP на языке высокого уровня и компилировать их в собственные расширения PHP. Такой подход, вместо написания расширений PHP непосредственно на языке C, упрощает разработку расширений и сокращает время, необходимое для программирования и тестирования.

К декабрю 2018 года группа PHP состояла из десяти человек: Тис К. Арнтцен , Стиг Баккен , Шейн Каравео , Энди Гутманс , Расмус Лердорф , Сэм Руби , Саша Шуманн , Зеев Сураски , Джим Уинстед и Андрей Змиевский .

Zend Technologies предлагает программистам сертификацию PHP на основе экзамена PHP 8 (ранее основанную на PHP 7 и 5.5), чтобы они могли стать сертифицированными разработчиками PHP.

Установка и настройка

PHP история и основы серверного языка

Пример вывода функции phpinfo() в PHP 7.1

Существует два основных способа добавления поддержки PHP на веб-сервер: в качестве собственного модуля веб-сервера или в качестве исполняемого файла CGI. PHP имеет прямой модульный интерфейс, называемый интерфейсом программирования серверных приложений (SAPI), который поддерживается многими веб-серверами, включая Apache HTTP Server , Microsoft IIS и iPlanet Web Server . Некоторые другие веб-серверы, такие как OmniHTTPd, поддерживают интерфейс программирования приложений интернет-сервера (ISAPI), который является интерфейсом модулей веб-сервера Microsoft . Если PHP не поддерживает модуль для веб-сервера, его всегда можно использовать в качестве процессора Common Gateway Interface (CGI) или FastCGI ; в этом случае веб-сервер настроен на использование исполняемого файла PHP CGI для обработки всех запросов к файлам PHP. [

PHP-FPM (менеджер процессов FastCGI) — это альтернативная реализация FastCGI для PHP, входящая в официальный дистрибутив PHP, начиная с версии 5.3.3. По сравнению со старой реализацией FastCGI, она содержит некоторые дополнительные функции, в основном полезные для высоконагруженных веб-серверов.

При использовании PHP для написания скриптов командной строки необходим исполняемый файл интерфейса командной строки (CLI) PHP. PHP поддерживает интерфейс программирования серверных приложений (SAPI) CLI, начиная с версии PHP 4.3.0. Основное внимание в этом SAPI уделяется разработке оболочек приложений на PHP. Между CLI SAPI и другими SAPI существует немало различий, хотя многие из них имеют схожее поведение.

PHP имеет прямой модульный интерфейс SAPI для различных веб-серверов; в случае PHP 5 и Apache 2.0 в Windows он представлен в виде DLL -файла php5apache2.dll , представляющего собой модуль, который, помимо прочего, обеспечивает интерфейс между PHP и веб-сервером, реализованный в понятной для сервера форме. Эта форма называется SAPI.

Существуют различные типы SAPI для различных расширений веб-сервера. Например, помимо перечисленных выше, для языка PHP существуют другие SAPI, включая Common Gateway Interface и интерфейс командной строки.

PHP также можно использовать для написания приложений графического пользовательского интерфейса (GUI) для настольных компьютеров с помощью «PHP Desktop» . GitHub .или расширение PHP-GTK , поддержка которого прекращена . PHP-GTK не входит в официальный дистрибутив PHP и, как расширение, может использоваться только с версиями PHP 5.1.0 и новее. Наиболее распространенный способ установки PHP-GTK — компиляция из исходного кода.

При установке и использовании PHP в облачных средах предоставляются комплекты средств разработки программного обеспечения (SDK) для использования облачных функций. Например:

  • Amazon Web Services предоставляет AWS SDK для PHP
  • Microsoft Azure можно использовать с Windows Azure SDK для PHP.

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

Использование

PHP история и основы серверного языка

Широкий обзор программного обеспечения LAMP, представленного здесь вместе со Squid

PHP — это язык сценариев общего назначения, который особенно подходит для серверной веб-разработки , в этом случае PHP обычно работает на веб-сервере . Любой PHP-код в запрошенном файле выполняется средой выполнения PHP, обычно для создания динамического содержимого веб-страницы или динамических изображений, используемых на веб-сайтах или в других местах. [ 289 ] Его также можно использовать для написания сценариев командной строки и клиентских приложений с графическим пользовательским интерфейсом (GUI). PHP можно развернуть на большинстве веб-серверов, во многих операционных системах и платформах , а также со многими системами управления реляционными базами данных (RDBMS). Большинство провайдеров веб-хостинга поддерживают PHP для использования своими клиентами. Он доступен бесплатно, и PHP Group предоставляет пользователям полный исходный код для создания, настройки и расширения для собственного использования.

PHP история и основы серверного языка

Динамическая веб-страница: пример серверного скрипта (PHP и MySQL)

Первоначально разработанный для создания динамических веб-страниц , PHP теперь в основном фокусируется на серверных скриптах и похож на другие серверные языки сценариев, которые предоставляют динамический контент с веб-сервера к клиенту, такие как Python, Microsoft ASP.NET, Sun Microsystems JavaServer Pages и . PHP также привлек разработку многих программных фреймворков , которые предоставляют строительные блоки и структуру дизайна для содействия быстрой разработке приложений (RAD). Некоторые из них включают PRADO , CakePHP , Symfony , CodeIgniter , Laravel , Yii Framework , Phalcon и Laminas , предлагающие функции, похожие на другие веб-фреймворки . mod_perl

Архитектура LAMP стала популярной в веб-индустрии как способ развертывания веб-приложений. PHP обычно используется как P в этом пакете наряду с Linux , Apache и MySQL , хотя P может также относиться к Python , Perl или некоторой смеси этих трех. Похожие пакеты, WAMP и MAMP , также доступны для Windows и macOS , причем первая буква обозначает соответствующую операционную систему. Хотя и PHP, и Apache предоставляются как часть базовой установки macOS, пользователи этих пакетов ищут более простой механизм установки, который можно было бы легче поддерживать в актуальном состоянии.

Для специфических и более сложных сценариев использования PHP предлагает четко определенный и документированный способ написания пользовательских расширений на C или C++ .Помимо расширения самого языка в виде дополнительных библиотек , расширения предоставляют способ повышения скорости выполнения там, где это критически важно и есть возможности для улучшений за счет использования действительно компилируемого языка . PHP также предлагает четко определенные способы встраивания себя в другие программные проекты. Таким образом, PHP можно легко использовать как внутренний язык сценариев для другого проекта, также обеспечивая тесное взаимодействие с определенными внутренними структурами данных проекта .

PHP получил неоднозначные отзывы из-за отсутствия поддержки многопоточности на уровне ядра языка , хотя использование потоков стало возможным благодаря расширению PECL «pthreads» .

Были созданы интерфейс командной строки, php-cli и два скриптовых движка ActiveX Windows Script Host для PHP.

Безопасность

В 2019 году 11% всех уязвимостей, перечисленных в Национальной базе данных уязвимостей, были связаны с PHP; исторически около 30% всех уязвимостей, перечисленных с 1996 года в этой базе данных, связаны с PHP. Технические недостатки безопасности самого языка или его основных библиотек встречаются нечасто (22 в 2009 году, около 1% от общего числа, хотя PHP применяется примерно к 20% перечисленных программ). Признавая, что программисты допускают ошибки, некоторые языки включают проверку на наличие зараженных данных для автоматического обнаружения отсутствия проверки входных данных , что вызывает много проблем. Такая функция предлагалась для PHP в прошлом, но была либо отклонена, либо предложение было снято с производства.

Сторонние проекты, такие как Suhosin и Snuffleupagus , направлены на удаление или изменение опасных частей языка.

Исторически сложилось так, что в старых версиях PHP были некоторые параметры конфигурации и значения по умолчанию для таких параметров времени выполнения, что делало некоторые PHP-приложения уязвимыми к проблемам безопасности. Среди них наиболее известны директивы конфигурации magic_quotes_gpcи register_globals ; последние превращали любые параметры URL в переменные PHP, открывая путь к серьезным уязвимостям безопасности, позволяя злоумышленнику установить значение любой неинициализированной глобальной переменной и помешать выполнению PHP-скрипта. Поддержка параметров « волшебных кавычек » и «регистрации глобальных переменных» устарела, начиная с версии PHP 5.3.0, и удалена в версии PHP 5.4.0.

Другой пример потенциальной уязвимости настроек времени выполнения — отсутствие отключения выполнения PHP (например, с помощью engineдирективы конфигурации) для каталога, где хранятся загруженные файлы; включение этой директивы может привести к выполнению вредоносного кода, встроенного в загруженные файлы.Лучшая практика — либо разместить каталог изображений вне корневого каталога документов, доступного веб-серверу, и обслуживать его через промежуточный скрипт, либо отключить выполнение PHP для каталога, в котором хранятся загруженные файлы.

Кроме того, включение динамической загрузки расширений PHP (через enable_dlдирективу конфигурации) в среде общего веб-хостинга может привести к проблемам безопасности.

Неявные преобразования типов , приводящие к тому, что различные значения рассматриваются как равные, иногда вопреки намерениям программиста, могут привести к проблемам безопасности. Например, результатом сравнения '0e1234' == '0'будет true, поскольку строки, которые можно интерпретировать как числа, преобразуются в числа; в этом случае первое сравниваемое значение рассматривается как экспоненциальная запись, имеющая значение (0 × 10 1234 ), что равно нулю. Подобные ошибки приводили к уязвимостям аутентификации на форуме Simple MachinesTypo3и phpBB при сравнении хэшей паролей MD5 . Рекомендуется использовать (для защиты от атак по времени ) или оператор идентификации ( ), как показано в . hash_equals()strcmp==='0e1234' === '0'false

В анализе более 170 000 случаев порчи веб-сайтов , опубликованном Zone-H в 2013 году , наиболее часто (53%) используемой техникой была эксплуатация уязвимости включения файлов , в основном связанной с небезопасным использованием конструкций языка PHP include, requireи allow_url_fopen.

Криптографическая безопасность

В PHP есть функции rand()и mt_rand() , которые используют генератор псевдослучайных чисел и не являются криптографически безопасными. Начиная с версии 8.1, эта random_int()функция включена, используя криптографически безопасный источник случайных чисел, предоставляемый системой.

Существуют две атаки, которые можно выполнить через источники энтропии PHP: «атака с исходным кодом» и «атака с восстановлением состояния». По состоянию на 2012 год графический процессор стоимостью 250 долларов США может выполнять до 230 вычислений MD5 в секунду, тогда как графический процессор стоимостью 750 долларов США может выполнять в четыре раза больше вычислений одновременно. В сочетании с « атакой дня рождения » это может привести к серьезным уязвимостям безопасности.

Долгосрочная поддержка

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

Расширенная долгосрочная поддержка предоставляется коммерческими поставщиками, такими как Zend и другими

Вау!! 😲 Ты еще не читал? Это зря!

  • Сравнение языков программирования
  • Список пакетов Apache–MySQL–PHP
  • Список PHP-ускорителей
  • Список PHP-редакторов
  • Список программного обеспечения и инструментов PHP
  • PEAR (репозиторий расширений и приложений PHP)
  • PHP-ускоритель
  • Процессор шаблонов
  • XAMPP (бесплатный кроссплатформенный пакет решений для веб-серверов с открытым исходным кодом)
  • Zend- сервер

Исследование, описанное в статье про php, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое php и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

создано: 2025-09-17
обновлено: 2025-09-17
44



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:
Пожаловаться

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)