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

PHP - это язык сценариев общего назначения, особенно подходящий для веб-разработки . [5] Первоначально он был создан датско-канадским программистом Расмусом Лердорфом в 1994 году. [6] Эталонная реализация PHP теперь производится PHP Group. [7] Изначально PHP означал персональную домашнюю страницу , [6] но теперь он означает рекурсивный инициализм PHP: препроцессор гипертекста . [8]

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

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

Язык PHP развивался без письменной формальной спецификации или стандарта до 2014 года, при этом исходная реализация действовала как стандарт де-факто, которому другие реализации стремились следовать. С 2014 года продолжалась работа по созданию формальной спецификации PHP. [12]

По состоянию на январь 2021 года 72% веб-сайтов PHP используют прекращенные версии PHP, то есть PHP 7.2 или ниже, которые больше не поддерживаются командой разработчиков PHP. Значительная дополнительная часть использует PHP 7.3, который (до 6 декабря 2021 г.) «поддерживается только для критических проблем безопасности». [13] Более 40% всех веб-сайтов PHP используют версию 5.6 или более раннюю [14], которую не поддерживает даже Debian ( Debian 9 поддерживает версии 7.0 и 7.1). [15]

История [ править ]

Ранняя история [ править ]

Расмус Лердорф , который написал исходный компонент Common Gateway Interface (CGI), вместе с Энди Гутмансом и Зивом Сураски , которые переписали синтаксический анализатор , сформировавший PHP 3.

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

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

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

<! - включить  / текст / заголовок . html -><! - GETENV  HTTP_USER_AGENT -> <! - если  подстрока  $ exec_result  Mozilla ->  Эй ,  вы  которые с  помощью  Netscape ! < Р > <! - ENDIF -><! - SQL  базы данных  выберите  *  из  таблицы ,  где  пользователь = '$ имя пользователя' -> <! - ifless  $ NumEntries  1 -> К  сожалению ,  что  запись  вовсе  не  существует < р > <! - ENDIF  выход ->  Добро пожаловать  <! - $ пользователю ! -> < р >  Вы  есть  <! - $ индекс : 0 ->  кредиты  осталось  в  вашем  аккаунте <.p ><! - включить  / текст / нижний колонтитул . html ->

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

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

PHP 3 и 4 [ править ]

Это пример настраиваемого кода PHP для системы управления контентом WordPress .

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

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

PHP 5 [ править ]

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

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

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

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

PHP 6 и Unicode [ править ]

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

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

PHP 7 [править]

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

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

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

  • Многие устаревшие механизмы ошибок PHP фатального или исправимого уровня были заменены современными объектно-ориентированными исключениями . [54]
  • Синтаксис переменного разыменования был переработан , чтобы быть внутренне последовательными и полным, что позволяет использовать операторы ->, [], (), {}, и ::, с произвольными содержательными левосторонними выражениями. [55]
  • Поддержка устаревших методов конструктора в стиле PHP 4 устарела. [56]
  • Поведение foreachзаявления было изменено на более предсказуемое. [57]
  • Конструкторы для нескольких классов, встроенных в PHP, которые возвращали null при сбое, были изменены, чтобы вместо этого генерировать исключение для согласованности. [58]
  • Несколько необслуживаемых или устаревших интерфейсов программирования серверных приложений (SAPI) и расширений были удалены из ядра PHP, в первую очередь устаревшее mysqlрасширение. [59]
  • Поведение list()оператора было изменено, чтобы удалить поддержку строк. [60]
  • Была удалена поддержка устаревших разделителей в стиле ASP <%и %>и <script language="php"> ... </script>. [61]
  • Исправлена недоработка, позволяющая оператору switch иметь несколько defaultпредложений. [62]
  • Поддержка шестнадцатеричных чисел в некоторых неявных преобразованиях из строк в числовые типы была удалена. [63]
  • Операторы сдвига влево и вправо были изменены, чтобы вести себя более согласованно на разных платформах. [64]
  • Преобразования между числами с плавающей запятой и целыми числами были изменены (например, бесконечность изменена на преобразование в ноль) и реализованы более последовательно на разных платформах. [64] [65]

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

PHP 8 [ править ]

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

Своевременная компиляция [ править ]

Компиляция точно в срок поддерживается в PHP 8. [70]

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

Добавление выражения соответствия [ править ]

В PHP 8 появилось matchвыражение. [75] Выражение соответствия концептуально похоже на switchоператор и более компактно для некоторых случаев использования. [76] Поскольку matchявляется выражением, его результат может быть записан в переменную или возвращен функцией. [77]

Изменения и дополнения типов [ править ]

PHP 8 представил типы объединения, новый staticтип возвращаемого значения и новый mixedтип. [68]

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

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

Изменения и дополнения синтаксиса [ править ]

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

$ human_readable_date  =  $ user -> getBirthday () ? -> diffForHumans ();

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

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

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

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

Дополнительные изменения [ править ]

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

История выпусков [ править ]

Начиная с 28 июня 2011 года, команда разработчиков PHP реализовала график выпуска новых версий PHP. [53] Согласно этой системе, по крайней мере, один выпуск должен происходить каждый месяц. Раз в год должен выпускаться небольшой выпуск, который может включать новые функции. Каждый второстепенный выпуск должен поддерживаться как минимум в течение двух лет с исправлениями безопасности и ошибок, а затем как минимум один год только исправлениями безопасности, в общей сложности трехлетний процесс выпуска для каждого второстепенного выпуска. Никакие новые функции, за исключением небольших и автономных, не должны вводиться в второстепенный выпуск в течение трехлетнего процесса выпуска.

Талисман [ править ]

ElePHPant, талисман PHP

Талисманом PHP проекта является elePHPant , синий слон с PHP логотип на его стороне, разработанный Винсентом Понтиер [165] в 1998 г. [166] «В (PHP) письма образуя форму слона , если смотреть в боковой угол ". [167] ElePHPant иногда бывает разного цвета в форме плюшевой игрушки .

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

Синтаксис [ править ]

Приложение "Hello World" в PHP 7.4, работающее на сервере разработки localhost

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

<! DOCTYPE html> <html>  <head>  <title> PHP "Hello, World!" программа </title>  </head>  <body> <? php echo '<p> Hello, World! </p>' ; ?>     </body> </html>

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

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

Интерпретатор PHP выполняет код PHP только в пределах его разделителей . Все, что находится за пределами его разделителей, не обрабатывается PHP, хотя текст, не относящийся к PHP, по-прежнему подчиняется структурам управления, описанным в коде PHP. Наиболее распространенные разделители - <?phpоткрывать и закрывать разделы PHP. Сокращенная форма тоже существует. Этот короткий разделитель делает файлы сценариев менее переносимыми, поскольку их поддержка может быть отключена в локальной конфигурации PHP и поэтому не рекомендуется; [171] [172] нет никаких рекомендаций относительно короткого тега echo . [173] До PHP 5.4.0 этот короткий синтаксис для работал только с?><?<?=echo()short_open_tagнастройка конфигурации включена, в то время как для PHP 5.4.0 и новее она всегда доступна. [174] [175] [171] Назначение всех этих разделителей - отделить код PHP от содержимого, не относящегося к PHP, такого как код JavaScript или разметка HTML. [176] Итак, самое короткое «Hello, World!» программа, написанная на PHP:

<? = 'Привет, мир!' ;

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

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

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

<? php  $ name  =  "Джон" ;  // Объявленная и инициализированная переменная типа String  $ age  =  18 ;  // Объявляемая и инициализируемая переменная целочисленного типа  $ height  =  5.3 ;  // Объявленная и инициализированная переменная типа Double  echo  $ name  .  «есть»  .  Высота $  .  "м высотой \ п " ;  // Объединение переменных и строк  echo  " $ name is $ age years". ;  // Интерполировать переменные в строку ?>

В отличие от имен функций и классов, имена переменных чувствительны к регистру. И строки в двойных кавычках (""), и строки heredoc предоставляют возможность интерполировать значение переменной в строку. [178] PHP обрабатывает символы новой строки как пробелы в манере языка произвольной формы , а операторы заканчиваются точкой с запятой. [179] PHP имеет три типа синтаксиса комментариев : /* */блок пометок и встроенные комментарии; //или #используются для однострочных комментариев. [180]echo утверждение является одним из нескольких объектов PHP предоставляет для вывода текста.

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

Типы данных [ править ]

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

Числа с плавающей запятой также хранятся в диапазоне, зависящем от платформы. Они могут быть указаны с использованием нотации с плавающей запятой или двух форм экспоненциальной нотации . [182] PHP имеет собственный логический тип, который похож на собственные логические типы в Java и C ++ . При использовании правил преобразования логического типа ненулевые значения интерпретируются как истинные, а нулевые как ложные, как в Perl и C ++. [182]

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

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

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

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

Функции [ править ]

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

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

function  myAge ( int  $ BirthYear ) :  string {  // вычисляем возраст, вычитая год рождения из текущего года.  $ yearsOld  =  дата ( 'Y' )  -  $ BirthYear ; // возвращаем возраст в описательной строке.  вернуть  $ yearsOld  .  "год"  .  ( $ yearsOld  ! =  1  ?  's' : '' ); }echo  «Я сейчас»  .  мой возраст ( 1995 )  .  ' Старый.' ;

В 2021 году результатом вышеприведенной примерной программы будет «В настоящее время мне 26 лет».

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

До PHP 5.3 в PHP не существовало поддержки анонимных функций и закрытий . Хотя create_function()он существует с PHP 4.0.1, это просто тонкая оболочка eval(), позволяющая создавать обычные функции PHP во время выполнения программы. [187] В PHP 5.3 добавлен синтаксис для определения анонимной функции или « закрытия » [188], которая может захватывать переменные из окружающей области видимости. Сокращенный синтаксис стрелок был добавлен в PHP 7.4: [189]

функция  getAdder ( $ x )  {  return  fn ( $ y )  =>  $ x  +  $ y ; }$ adder  =  getAdder ( 8 ); echo  $ adder ( 2 );  // выводит "10"

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

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

функция  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 позволит передавать в эту функцию не только целые числа, но также преобразовываемые числовые строки, числа с плавающей запятой или логические значения, и будет преобразовывать их. [67] Однако в PHP 7 есть режим «строгой типизации», который при использовании запрещает такие преобразования для вызовов функций и возвращает их в файл. [67]

Объекты PHP [ править ]

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

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

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

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

Пример [ править ]

Ниже приведен базовый пример объектно-ориентированного программирования в PHP 8:

<? phpабстрактный  класс  User{ защищенная  строка  $ name ; публичная  функция  __construct ( строка  $ имя ) { // сделать первую букву заглавной, а остальные строчные $ this -> name  =  ucfirst ( strtolower ( $ name )); } общедоступная  функция  greet () :  строка { верните  «Здравствуйте, меня зовут»  .  $ this -> имя ; } абстрактная  публичная  функция  job () :  строка ;}class  Student  расширяет  User{ публичная  функция  __construct ( строка  $ имя ,  частная  строка  $ курс ) { родитель :: __construct ( $ имя ); } публичная  функция  job () :  строка { верните  «я узнаю»  .  $ this -> конечно ; }}класс  Учитель  расширяет  пользователя{ публичная  функция  __construct ( строка  $ name ,  частный  массив  $ trainingCourses ) { родитель :: __construct ( $ имя ); } публичная  функция  job () :  строка { верните  «я учу»  .  implode ( "," ,  $ this -> trainingCourses ); }}$ student  =  [ новый  студент ( «Алиса» ,  «Информатика» ), новый  студент ( «ЛПП» ,  «Информатика» ), новый  студент ( «Чарли» ,  «Бизнес-исследования» ),];$ Teacher  =  [ новый  учитель ( «Дэн» ,  [ «Информатика» ,  «Информационная безопасность» ]), новый  учитель ( «Эрин» ,  [ «Информатика» ,  «Программирование 3D-графики» ]), новый  учитель ( «Фрэнки» ,  [ «Интернет-маркетинг» ,  «Бизнес-исследования» ,  «Электронная коммерция» ]),];foreach  ([ $ студенты ,  $ учителя ]  как  $ пользователи )  { echo  $ users [ 0 ] :: class  .  "s: \ n " ; array_walk ( $ users ,  function  ( Пользователь  $ user )  { echo  " { $ user -> greet () } , { $ user -> job () } \ n " ; });}// Вывод программы:// Студенты:// Здравствуйте, меня зовут Алиса, я изучаю компьютерные науки// Здравствуйте, меня зовут Боб, я изучаю информатику// Здравствуйте, меня зовут Чарли, я изучаю бизнес-исследования// Учителя:// Здравствуйте, меня зовут Дэн, я преподаю информатику, информационную безопасность// Здравствуйте, меня зовут Эрин, я преподаю информатику, программирование 3D-графики// Здравствуйте, меня зовут Фрэнки, я преподаю онлайн-маркетинг, бизнес-исследования, электронную коммерцию

Реализации [ править ]

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

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

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

  • HHVM (HipHop Virtual Machine) - разработан в Facebook и доступен как открытый исходный код, он преобразует код PHP в байт-код высокого уровня (обычно известный как промежуточный язык ), который затем динамически транслируется в машинный код x86-64 во время выполнения с помощью просто по времени (JIT) компилятор, в результате чего до улучшения 6 × производительности. [199] Однако, поскольку версия 7.2 Zend превзошла HHVM, [200] и HHVM 3.24 является последней версией, официально поддерживающей PHP. [201]
  • Parrot  - виртуальная машина, предназначенная для эффективного запуска динамических языков; Пипп преобразует исходный код PHP в промежуточное представление Parrot , которое затем транслируется в байт-код Parrot и выполняется виртуальной машиной.
  • PeachPie - компилятор второго поколения для. NET Common Intermediate Language (CIL) байткод, построенный на Рослин платформе; преемник Phalanger, разделяющий несколько архитектурных компонентов
  • Phalanger  - компилирует PHP в байт-код CIL; предшественник PeachPie
  • Quercus  - компилирует PHP в байт-код Java
  • HipHop  - разработанный Facebook и доступный как открытый исходный код, он преобразует сценарии PHP в код C ++, а затем компилирует полученный код, снижая нагрузку на сервер до 50%. В начале 2013 года Facebook осуждается его в пользу HHVM из - за нескольких причин, в том числе трудности развертывания и отсутствие поддержки для всего языка PHP, в том числе create_function()и eval()конструкций. [202]

Лицензирование [ править ]

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

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

Это ограничение на использование «PHP» делает лицензию PHP несовместимой с Стандартной общественной лицензией (GPL), в то время как лицензия Zend несовместима из-за пункта о рекламе, аналогичного положению в исходной лицензии BSD . [204]

Развитие и сообщество [ править ]

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

PHP позволяет разработчикам писать расширения на C для добавления функциональности языку PHP. Расширения PHP могут быть скомпилированы в PHP статически или загружены динамически во время выполнения. Были написаны многочисленные расширения для добавления поддержки Windows API , управления процессами в Unix-подобных операционных системах , многобайтовых строк ( Unicode ), cURL и нескольких популярных форматов сжатия . Другие функции PHP, доступные через расширения, включают интеграцию с IRC , динамическое создание изображений и содержимого Adobe Flash , объекты данных PHP.(PDO) как уровень абстракции, используемый для доступа к базам данных, [206] [207] [208] [209] [210] [211] [212] и даже синтез речи . Некоторые из основных функций языка, например, работы со строками и массивами, также реализованы как расширения. [213] Проект PHP Extension Community Library (PECL) представляет собой репозиторий расширений для языка PHP. [214]

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

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

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

Установка и настройка [ править ]

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

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

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

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

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

Существуют разные виды SAPI для различных расширений веб-сервера. Например, в дополнение к перечисленным выше, другие SAPI для языка PHP включают общий интерфейс шлюза (CGI) и интерфейс командной строки (CLI). [223] [225]

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

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

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

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

Используйте [ редактировать ]

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

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

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

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

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

Для конкретных и более сложных сценариев использования PHP предлагает четко определенный и документированный способ написания пользовательских расширений на C или C ++ . [238] [239] [240] [241] [242] [243] [244] Помимо расширения самого языка в виде дополнительных библиотек , расширения предоставляют способ повышения скорости выполнения там, где это критично, и есть место для улучшения за счет использования настоящего скомпилированного языка . [245] [246] PHP также предлагает четко определенные способы встраивания в другие программные проекты. Таким образом, PHP можно легко использовать как внутренний язык сценариев.для другого проекта, также обеспечивая тесное взаимодействие со специфическими внутренними структурами данных проекта . [247]

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

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

Статистика популярности и использования [ править ]

PHP используется для систем управления веб-контентом, включая MediaWiki , [251] WordPress , [252] Joomla , [253] Drupal , [254] Moodle , [255] eZ Publish , eZ Platform и SilverStripe . [256]

Веб-сайты, использующие PHP, включают Facebook , [257] Digg , [258] Dailymotion , [259] и Tumblr [260] .

По состоянию на январь 2013 года PHP использовался более чем на 240 миллионах веб-сайтов (39% из отобранных) и был установлен на 2,1 миллиона веб-серверов . [261]

По состоянию на август 2019 года PHP использовался в качестве серверного языка программирования на 78,8% веб-сайтов, по сравнению с 83,5% ранее, где язык мог быть определен. [262]

По состоянию на апрель 2020 года PHP 7 является наиболее часто используемой версией языка [263]: 50,6% сайтов используют PHP и 39,6% всех веб-сайтов в Интернете. [264]

Безопасность [ править ]

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

Есть продвинутые патчи защиты , такие как Suhosin и закаливания -patch, специально разработанные для веб - хостинга среды. [270]

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

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

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

Подразумеваемые преобразования типов , в результате которых разные значения рассматриваются как равные, иногда вопреки намерениям программиста, могут привести к проблемам с безопасностью. Например, результатом сравнения '0e1234' == '0'является то true, что строки, которые можно анализировать как числа, преобразуются в числа; в этом случае первое сравниваемое значение рассматривается как научное представление, имеющее значение (0 × 10 1234 ), что равно нулю. Ошибки , как это привело к уязвимости аутентификации в Simple Machines Forum , [280] Typo3 [281] и PHPBB [282] , когда MD5 хэши паролей сравнивались. Рекомендуемый способ - использовать hash_equals () (для защиты от атак по времени ) strcmpили оператор идентификации ( ===), как '0e1234' === '0'результат false. [283]

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

См. Также [ править ]

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

Ссылки [ править ]

  1. ^ а б Лердорф, Расмус (2007-04-26). «PHP на гормонах - история презентации PHP Расмуса Лердорфа на конференции MySQL в Санта-Кларе, Калифорния» . Сеть разговоров . Проверено 11 декабря 2009 .
  2. ^ "PHP 8 ChangeLog" .
  3. ^ «PHP: аргументы функций - Руководство» . secure.php.net .
  4. ^ Стогов, Дмитрий (2015-12-04). «Не секрет, что некоторые идеи оптимизации # PHP7 пришли из HHVM, LuaJIT и V8» . Twitter.
  5. ^ "PHP: Препроцессор гипертекста" . www.php.net . Проверено 12 февраля 2020 .
  6. ^ а б «История PHP» . php.net .
  7. ^ a b c d e f g h i "История PHP и связанных проектов" . Группа PHP . Проверено 25 февраля 2008 .
  8. ^ Руководство по PHP: Предисловие , www.php.net.
  9. ^ "Введение: что умеет PHP?" . Руководство по PHP . Проверено 5 марта 2009 .
  10. ^ вертолет: Порт node-ar-drone, который позволяет пользователю управлять Drone AR Parrot через PHP: jolicode / php-ar-drone , JoliCode, 11.01.2019 , получено 23.02.2019
  11. ^ a b «Встраивание PHP в HTML» . О'Рейли. 2001-05-03 . Проверено 25 февраля 2008 .
  12. ^ Джексон, Иоав (2014-07-31). «PHP наконец-то получил формальную спецификацию» . Компьютерный мир . IDG .
  13. ^ «PHP: Поддерживаемые версии» . www.php.net . Проверено 2 сентября 2020 . Конец жизни: выпуск, который больше не поддерживается. Пользователи этого выпуска должны выполнить обновление как можно скорее, поскольку они могут быть подвержены незащищенным уязвимостям безопасности.
  14. ^ «Статистика использования и рыночная доля PHP для веб-сайтов, декабрь 2020 г.» . w3techs.com . Проверено 8 декабря 2020 .
  15. ^ a b c d e f g h i j k l m «Неподдерживаемые ветви» . php.net . Проверено 31 июля 2019 .
  16. ^ Lerdorf, Расмус (2012-07-20). «Интересно, почему люди продолжают писать, что PHP когда-либо был написан на Perl. Этого никогда не было. #Php» . Twitter . Проверено 4 сентября 2014 .
  17. ^ Lerdorf, Расмус (2007-04-26). «PHP на гормонах» (mp3) . Сеть разговоров . Проверено 22 июня 2009 .
  18. ^ Lerdorf, Rasmus (2007). «Слайд 3» . слайды для доклада «PHP на гормонах» . Группа PHP . Проверено 22 июня 2009 .
  19. ^ Lerdorf, Расмус (8 июня 1995). «Анонс: инструменты персональной домашней страницы (инструменты PHP)» . Проверено 7 июня 2011 года .
  20. ^ Lerdorf, Расмус (1995-06-08). «Анонс: инструменты персональной домашней страницы (инструменты PHP)» . Группа новостейcomp.infosystems.www.authoring.cgi . Проверено 17 сентября 2006 .
  21. ^ «Расмус Лердорф, старший технический специалист Yahoo: PHP, за микрофоном» . 2003-11-19. Архивировано из оригинала на 2013-07-28.
  22. ^ «Проблемы с PHP» . Проверено 20 декабря 2010 года .
  23. ^ "php.internals: Re: Согласованность имени функции" . news.php.net . 2013-12-28 . Проверено 9 февраля 2014 .
  24. Расмус Лердорф (16 декабря 2013 г.). «Re: Гибкое именование функций» . Группа новостейphp.internals . Проверено 26 декабря 2013 года .
  25. ^ «PHP - Акроним, означающий голосование» . PHP.net . Архивировано из оригинального 15 августа 2000 года.
  26. ^ «Zend Engine версии 2.0: Обзор функций и дизайн» . Zend Technologies Ltd. Архивировано из оригинала на 2006-07-19 . Проверено 17 сентября 2006 .
  27. ^ "Архив новостей php.net 2007" . Группа PHP. 2007-07-13 . Проверено 22 февраля 2008 .
  28. ^ Кернер, Шон Майкл (2008-02-01). «PHP 4 мертв - да здравствует PHP 5» . ИнтернетНовости. Архивировано из оригинала на 2018-08-06 . Проверено 16 декабря 2018 .
  29. ^ Трахтенберг, Адам (2004-07-15). "Почему PHP 5 Rocks!" . О'Рейли . Проверено 22 февраля 2008 .
  30. ^ «Поздняя статическая привязка в PHP» . Цифровой сэндвич. 2006-02-23 . Проверено 25 марта 2008 .
  31. ^ «Статическое ключевое слово» . Группа PHP . Проверено 25 марта 2008 .
  32. ^ "GoPHP5" . Архивировано из оригинала на 2011-07-17.
  33. ^ GoPHP5. «Проекты PHP объединяют усилия, чтобы перейти на PHP 5» (PDF) . Пресс-релиз GoPHP5 . Архивировано из оригинального (PDF) 10 декабря 2009 года . Проверено 23 февраля 2008 .
  34. ^ "GoPHP5" . GoPHP5. Архивировано из оригинала 2011-04-27 . Проверено 22 февраля 2008 .
  35. ^ «Установка и настройка PHP» . php.net . Проверено 29 октября 2013 .
  36. ^ «PHP для Windows: версии бинарных файлов и исходных кодов (5.3)» . php.net . Проверено 29 октября 2013 .
  37. ^ «PHP для Windows: версии бинарных файлов и исходных кодов (5.4)» . php.net . Проверено 29 октября 2013 .
  38. ^ «PHP для Windows: выпуски двоичных файлов и исходных кодов (5.5)» . php.net . Проверено 29 октября 2013 .
  39. ^ «PHP: Поддерживаемые версии» .
  40. ^ «Типы: строки (Руководство по PHP)» . PHP.net . Проверено 22 сентября 2013 .
  41. ^ «Подробная информация о строковом типе (Руководство по PHP)» . PHP.net . Проверено 22 сентября 2013 .
  42. ^ Андрей Zmievski (2005-08-10). «Проектный документ поддержки PHP Unicode» (Список рассылки) . Проверено 9 февраля 2014 .
  43. ^ «PHP 5.5 или 6.0» . Проверено 9 февраля 2014 .
  44. ^ Андрей Zmievski (2011-04-22). «Хорошее, плохое и уродливое: что случилось с Unicode и PHP 6» . Проверено 9 февраля 2014 .
  45. Расмус Лердорф (11 марта 2010 г.). «PHP 6» (Список рассылки) . Проверено 7 февраля 2014 .
  46. ^ "Бесконечные дебаты о куклах PHP 6 против PHP 7" . Архивировано из оригинала на 2015-11-19 . Проверено 19 ноября 2015 .
  47. ^ «RFC: название следующего выпуска PHP» . php.net . 2014-07-07 . Проверено 15 июля 2014 .
  48. ^ «Re: [PHP-DEV] [ГОЛОСОВАНИЕ] [RFC] Название следующего выпуска PHP (снова)» . 2014-07-30 . Проверено 30 июля 2014 .
  49. ^ "phpng: Рефакторинг PHP Engine с большим улучшением производительности" . news.php.net .
  50. ^ "PHP: rfc: phpng" . php.net . Проверено 16 декабря 2014 .
  51. ^ a b "PHP: phpng" . php.net . Проверено 15 июля 2014 .
  52. ^ "Объединить ветку 'ZendEngine3 ' " . github.com . 2014-12-05 . Проверено 5 декабря 2014 .
  53. ^ a b c «PHP: процесс выпуска» . 2011-06-20 . Проверено 6 октября 2013 .
  54. ^ a b «PHP RFC: исключения в движке (для PHP 7)» . php.net . Проверено 21 мая 2015 .
  55. ^ a b «PHP RFC: унифицированный синтаксис переменных» . php.net . 2014-05-31 . Проверено 30 июля 2014 .
  56. ^ "Онлайн-оболочка PHP | 150+ версий + статистика + vld + hhvm" .
  57. ^ "PHP RFC: Исправить поведение" foreach " . php.net . Проверено 21 мая 2015 .
  58. ^ "PHP RFC: Конструктор поведения внутренних классов" . php.net . Проверено 21 мая 2015 .
  59. ^ «PHP RFC: Удаление мертвых или еще не перенесенных на PHP7 SAPI и расширений» . php.net . Проверено 21 мая 2015 .
  60. ^ "PHP RFC: Исправить несоответствие поведения list ()" . php.net . Проверено 21 мая 2015 .
  61. ^ «PHP RFC: удалить альтернативные теги PHP» . php.net . Проверено 21 мая 2015 .
  62. ^ "PHP RFC: определение нескольких вариантов по умолчанию в переключателе синтаксической ошибкой" . php.net . Проверено 21 мая 2015 .
  63. ^ «PHP RFC: убрать поддержку шестнадцатеричного кода в числовых строках» . php.net . Проверено 21 мая 2015 .
  64. ^ a b «PHP RFC: целочисленная семантика» . php.net . Проверено 21 мая 2015 . Если NaN и Infinity всегда становятся равными нулю при преобразовании в целое число, это означает большую межплатформенную согласованность, а также менее удивительно, чем то, что в настоящее время производит
  65. ^ «PHP RFC: отказ ZPP при переполнении» . php.net . Проверено 21 мая 2015 .
  66. ^ a b c «RFC: возвращаемые типы» . php.net . 2015-01-27 . Проверено 28 января 2015 .
  67. ^ a b c d e f "RFC: объявления скалярных типов" . php.net . 2015-03-16 . Проверено 17 марта 2015 .
  68. ^ Б с д е е г Brent. «Что нового в PHP 8» . Прошивальщик . Проверено 22 сентября 2020 .
  69. ^ «PHP 8 выпущен» . PHP . Проверено 27 ноября 2020 года .
  70. ^ a b "PHP: rfc: jit" . wiki.php.net . Проверено 5 апреля 2019 .
  71. ^ Брент. «PHP 8: производительность JIT в реальных веб-приложениях» . Stitcher.io . Проверено 4 октября 2020 года .
  72. ^ Rethams, Дерик. «PHP 8: Краткий обзор JIT» .
  73. ^ а б Попов, Никита. « » Что нового в PHP 8.0? «Никита Попов» . PHP fwdays . Проверено 4 октября 2020 года .
  74. ^ Даниэле, Карло. «Что нового в PHP 8 (функции, улучшения и JIT-компилятор)» . Кинста . Проверено 24 декабря 2020 года .
  75. ^ Редмонд, Пол. «Выражение соответствия скоро появится в PHP 8» . Новости Laravel . Проверено 4 октября 2020 года .
  76. ^ «PHP 8.0: Match Expressions» . PHP Watch . Проверено 4 октября 2020 года .
  77. ^ Барнс, Эрик. "PHP 8 выпущен!" . Новости Laravel . Проверено 24 декабря 2020 года .
  78. ^ a b "PHP RFC: выражение throw" . wiki.php.net . Дата обращения 14 августа 2020 .
  79. ^ a b «PHP RFC: Nullsafe operator» . wiki.php.net . Дата обращения 14 августа 2020 .
  80. ^ a b "PHP: rfc: weakrefs" . wiki.php.net . Проверено 5 апреля 2019 .
  81. Торговец, Амит. «Эти новые строковые функции появятся в PHP 8» . Амит Мерчант . Проверено 4 октября 2020 года .
  82. Попов, Никита. «Призыв к участию: аннотирование внутренних аргументов функции и типов возвращаемых значений» . Внешний вид . Проверено 19 ноября 2020 .
  83. ^ «Выпущен PHP 4.0.0» . Проверено 25 октября 2020 года .
  84. ^ a b c d "PHP: журнал изменений PHP 4" . Группа PHP. 2008-01-03 . Проверено 22 февраля 2008 .
  85. ^ «Объявление о выпуске PHP 4.1.0» . Проверено 25 октября 2020 года .
  86. ^ «Объявление о выпуске PHP 4.2.0» . Проверено 25 октября 2020 года .
  87. ^ «Объявление о выпуске PHP 4.3.0» . Проверено 25 октября 2020 года .
  88. ^ «Использование PHP из командной строки» . Руководство по PHP . Группа PHP . Проверено 11 сентября 2009 .
  89. ^ «Объявление о выпуске PHP 4.4.0» . Проверено 25 октября 2020 года .
  90. ^ «Объявление о выпуске PHP 4.4.0» . PHP Mannual . Группа PHP . Проверено 24 ноября 2013 .
  91. ^ "Выпущен PHP 5.0.0!" . Проверено 25 октября 2020 года .
  92. ^ a b c "PHP: журнал изменений PHP 5" . Группа PHP. 2007-11-08 . Проверено 22 февраля 2008 .
  93. ^ «Объявление о выпуске PHP 5.1.0» . Проверено 25 октября 2020 года .
  94. ^ "Руководство по PHP: PDO" . Группа PHP. 2011-11-15 . Проверено 15 ноября 2011 .
  95. ^ «Объявление о выпуске PHP 5.2.0» . Проверено 25 октября 2020 года .
  96. ^ «Объявление о выпуске PHP 5.3.0» . Проверено 25 октября 2020 года .
  97. ^ «Объявление о выпуске PHP 5.4.0» . Проверено 25 октября 2020 года .
  98. ^ «Встроенный веб-сервер» . Проверено 26 марта 2012 года .
  99. ^ «Объявление о выпуске PHP 5.5.0» . Проверено 25 октября 2020 года .
  100. ^ a b c d «Поддерживаемые версии» . php.net . Проверено 13 декабря 2017 .
  101. ^ "Изменения PHP 5.5.0" . php.net . Проверено 3 марта 2015 .
  102. ^ «Объявление о выпуске PHP 5.6.0» . Проверено 25 октября 2020 года .
  103. ^ «Переход с PHP 5.5.x на PHP 5.6.x» . php.net . Проверено 24 марта 2014 .
  104. ^ «Сброс PHP 6» . На полках были книги, якобы охватывающие PHP 6, по крайней мере, с 2008 года. Но в марте 2010 года релиз PHP 6 еще не вышел - на самом деле, он даже не близок к завершению. Недавние события предполагают, что PHP 6 не будет выпущен раньше 2011 года - если он вообще будет выпущен.
  105. ^ «PHP 7 движется вперед полным ходом» . 2014-10-31. Последние версии PHP были частью серии выпусков 5.x, но PHP 6 не будет. «Мы собираемся пропустить [версию] 6, потому что несколько лет назад у нас были планы на выпуск 6, но эти планы были очень отличается от того, что мы делаем сейчас », - сказал Гутманс. Переход к версии 7 позволяет избежать путаницы.
  106. ^ «Архив новостей - 2018: Выпущен PHP 7.2.9» . php.net . 2018-08-16 . Проверено 16 августа 2018 .
  107. ^ "PHP: rfc: size_t_and_int64_next" . php.net . Проверено 16 декабря 2014 .
  108. ^ "PHP: rfc: abstract_syntax_tree" . php.net . Проверено 16 декабря 2014 .
  109. ^ "PHP: rfc: closure_apply" . php.net . Проверено 16 декабря 2014 .
  110. ^ "PHP: rfc: integer_semantics" . php.net . Проверено 16 декабря 2014 .
  111. ^ "PHP: rfc: isset_ternary" . php.net . Проверено 16 декабря 2014 .
  112. ^ "RFC: синтаксис экранирования кодовой точки Unicode" . 2014-11-24 . Проверено 19 декабря 2014 .
  113. ^ "Комбинированный оператор сравнения (космический корабль)" . php.net . Проверено 21 мая 2015 .
  114. ^ «PHP RFC: делегирование генератора» . php.net . Проверено 21 мая 2015 .
  115. ^ «PHP RFC: анонимные классы» . php.net . Проверено 21 мая 2015 .
  116. ^ "PHP RFC: простой пользовательский CSPRNG" . php.net . Проверено 21 мая 2015 .
  117. ^ «PHP RFC: объявления группового использования» . php.net . Проверено 21 мая 2015 .
  118. ^ "PHP: rfc: void_return_type" . php.net . 2015-11-09 . Проверено 14 ноября 2015 .
  119. ^ "PHP: rfc: class_constant_visibility" . php.net . 2015-10-27 . Проверено 8 декабря 2015 .
  120. ^ "PHP: rfc: object-typehint" . wiki.php.net .
  121. ^ "PHP: rfc: libsodium" . wiki.php.net .
  122. ^ "PHP: rfc: allow-abstract-function-override" . wiki.php.net .
  123. ^ "PHP: rfc: параметр-без-типа-дисперсия" . wiki.php.net .
  124. ^ "PHP: todo: php73" . wiki.php.net .
  125. ^ "PHP: rfc: flexible_heredoc_nowdoc_syntaxes" . wiki.php.net .
  126. ^ "PHP: rfc: list_reference_assignment" . wiki.php.net .
  127. ^ "PHP: rfc: pcre2-migration" . wiki.php.net .
  128. ^ «PHP: hrtime - Руководство» . php.net .
  129. ^ "PHP 7.4.0 выпущен!" . php.net . Проверено 28 ноября 2019 .
  130. ^ "PHP: rfc: typed_properties_v2" . wiki.php.net . Проверено 4 апреля 2019 .
  131. ^ "PHP: rfc: preload" . wiki.php.net . Проверено 4 апреля 2019 .
  132. ^ "PHP: rfc: null_coalesce_equal_operator" . wiki.php.net . Проверено 4 апреля 2019 .
  133. ^ "PHP: rfc: улучшить-openssl-random-pseudo-bytes" . wiki.php.net . Проверено 4 апреля 2019 .
  134. ^ "PHP: rfc: ffi" . wiki.php.net . Проверено 5 апреля 2019 .
  135. ^ "PHP: rfc: constant_hash_ext" . wiki.php.net . Проверено 5 апреля 2019 .
  136. ^ "PHP: rfc: password_registry" . wiki.php.net . Проверено 5 апреля 2019 .
  137. ^ "PHP: rfc: mb_str_split" . wiki.php.net . Проверено 5 апреля 2019 .
  138. ^ "PHP: rfc: reference_reflection" . wiki.php.net . Проверено 5 апреля 2019 .
  139. ^ "PHP: rfc: deprecate-and-remove-ext-wddx" . wiki.php.net . Проверено 5 апреля 2019 .
  140. ^ "PHP: rfc: custom_object_serialization" . wiki.php.net . Проверено 5 апреля 2019 .
  141. ^ "PHP: todo: php80" . wiki.php.net . Проверено 16 июня 2020 .
  142. ^ "PHP: rfc: negative_array_index" . wiki.php.net . Проверено 5 апреля 2019 .
  143. ^ «PHP RFC: Проверка абстрактных методов признаков» . wiki.php.net . Дата обращения 14 августа 2020 .
  144. ^ "PHP RFC: Более точная строка для сравнения чисел" . wiki.php.net . Дата обращения 14 августа 2020 .
  145. ^ "PHP RFC: более точные числовые строки" . wiki.php.net . Дата обращения 14 августа 2020 .
  146. ^ «PHP RFC: более строгие проверки типов для арифметических / побитовых операторов» . wiki.php.net . Дата обращения 14 августа 2020 .
  147. ^ "PHP RFC: Реклассификация предупреждений двигателя" . wiki.php.net . Дата обращения 14 августа 2020 .
  148. ^ "PHP: rfc: consisten_type_errors" . wiki.php.net . Проверено 5 апреля 2019 .
  149. ^ "PHP: rfc: lsp_errors" . wiki.php.net . Проверено 26 мая 2019 .
  150. ^ "PHP RFC: преобразование чисел с плавающей точкой в ​​строку, не зависящую от локали" . wiki.php.net . Дата обращения 14 августа 2020 .
  151. ^ «PHP RFC: настройки синтаксиса переменных» . wiki.php.net . Дата обращения 14 августа 2020 .
  152. ^ "PHP RFC: Атрибуты V2" . wiki.php.net . Дата обращения 14 августа 2020 .
  153. ^ «PHP RFC: изменения атрибутов» . wiki.php.net . Дата обращения 14 августа 2020 .
  154. ^ «PHP RFC: более короткий синтаксис атрибутов» . wiki.php.net . Проверено 20 июня 2020 .
  155. ^ «PHP RFC: более короткое изменение синтаксиса атрибутов» . wiki.php.net . Дата обращения 14 августа 2020 .
  156. ^ «PHP RFC: именованные аргументы» . wiki.php.net . Дата обращения 14 августа 2020 .
  157. ^ "PHP RFC: выражение соответствия v2" . wiki.php.net . Дата обращения 14 августа 2020 .
  158. ^ «PHP RFC: Продвижение свойств конструктора» . wiki.php.net . Дата обращения 14 августа 2020 .
  159. ^ «PHP RFC: Union Types 2.0» . wiki.php.net . Дата обращения 14 августа 2020 .
  160. ^ «PHP RFC: смешанный тип v2» . wiki.php.net . Дата обращения 14 августа 2020 .
  161. ^ «PHP RFC: статический возвращаемый тип» . wiki.php.net . Дата обращения 14 августа 2020 .
  162. ^ «PHP RFC: не захватывающие уловки» . wiki.php.net . Дата обращения 14 августа 2020 .
  163. ^ Андре, Тайсон. «PHP RFC: всегда доступно расширение JSON» . PHP . Проверено 25 октября 2020 года .
  164. ^ «PHP RFC: явное восьмеричное целочисленное буквенное обозначение» . wiki.php.net . Проверено 25 ноября 2020 .
  165. ^ «PHP: ElePHPant» . 4 октября 2014 . Дата обращения 4 октября 2014 .
  166. ^ «Перенаправление…» . wwphp-fb.github.io .
  167. ^ «Рождение талисмана PHP - создатель elePHPant Винсент Понтье раскрывает правдивую историю!» . 7php.com . 2014-01-06.
  168. ^ «PHP: ElePHPant» .
  169. ^ "Полевое руководство для слонов" .
  170. ^ "теги - Руководство" . php.net . Проверено 17 февраля 2014 .
  171. ^ a b "PHP: rfc: shortags" . php.net . 2008-04-03 . Проверено 8 мая 2014 .
  172. ^ «PHP: базовый синтаксис» . Группа PHP . Проверено 22 февраля 2008 .
  173. ^ «Базовый стандарт кодирования» . Группа взаимодействия PHP Framework . Проверено 3 января 2016 .
  174. ^ "эхо - Руководство" . php.net . Проверено 17 февраля 2014 .
  175. ^ "Описание основных директив php.ini - Руководство" . php.net . 2002-03-17 . Проверено 17 февраля 2014 .
  176. ^ "Ваша первая страница с поддержкой PHP" . Группа PHP . Проверено 25 февраля 2008 .
  177. ^ Брей, Тим; и другие. (26 ноября 2008 г.). «Инструкции по обработке» . Расширяемый язык разметки (XML) 1.0 (пятое издание) . W3C . Проверено 18 июня 2009 .
  178. ^ "Переменные" . Группа PHP . Проверено 16 марта 2008 .
  179. ^ "Разделение инструкций" . Группа PHP . Проверено 16 марта 2008 .
  180. ^ «Комментарии» . Группа PHP . Проверено 16 марта 2008 .
  181. ^ «Целые числа в PHP, работа ножницами и переносимость» . Блог производительности MySQL. 27 марта 2007 . Проверено 28 марта 2007 .
  182. ^ a b c d e "Типы" . Группа PHP . Проверено 16 марта 2008 .
  183. ^ "Струны" . Группа PHP . Проверено 21 марта 2008 .
  184. ^ "SPL - StandardPHPLibrary" . PHP.net . 16 марта 2009 . Проверено 16 марта 2009 .
  185. ^ a b «Пользовательские функции (руководство по PHP)» . php.net . 2014-07-04 . Проверено 7 июля 2014 .
  186. ^ a b «Функции переменных (руководство по PHP)» . php.net . 2014-07-04 . Проверено 7 июля 2014 .
  187. ^ "create_function () (руководство по PHP)" . php.net . 2014-07-04 . Проверено 7 июля 2014 .
  188. ^ «Анонимные функции (руководство по PHP)» . php.net . 2014-07-04 . Проверено 7 июля 2014 .
  189. ^ «Стрелочные функции (руководство по PHP)» . php.net . Проверено 25 января 2021 .
  190. ^ Кристиан Зайлер; Дмитрий Стогов (01.07.2008). «Запрос комментариев: лямбда-функции и замыкания» . php.net . Проверено 7 июля 2014 .
  191. ^ a b «Ссылки на объекты PHP 5» . mjtsai.com . Проверено 16 марта 2008 .
  192. ^ «Классы и объекты (PHP 5)» . Группа PHP . Проверено 16 марта 2008 .
  193. ^ «Клонирование объекта» . Группа PHP . Проверено 16 марта 2008 .
  194. ^ "Видимость (Руководство по PHP)" . theserverpages.com . 2005-05-19 . Проверено 26 августа 2010 .
  195. ^ "Как работают компьютерные языки?" . Проверено 4 ноября 2009 .
  196. Перейти ↑ Gilmore, W. Jason (23.01.2006). Начиная с PHP и MySQL 5: от новичка до профессионала . Апресс. п. 43 . ISBN 1590595521.
  197. ^ "[ГОЛОСОВАНИЕ] Интеграция Zend Optimizer + в дистрибутив PHP" . news.php.net . Проверено 8 марта 2013 .
  198. ^ «Альтернативный кеш PHP» . PHP.net . Проверено 21 сентября 2013 .
  199. ^ «Мы 98,5% (и 16%)« Виртуальная машина HipHop » . hhvm.com . Декабрь 2013 . Проверено 23 февраля 2014 .
  200. ^ «Окончательные тесты PHP 5.6, 7.0, 7.1, 7.2 и 7.3 (2019)» . 2019-01-14 . Проверено 19 апреля 2019 .
  201. ^ Криль, Павел (2017-09-20). «Забудьте о PHP! Вместо этого движок Facebook HHVM переключается на Hack» . InfoWorld . Проверено 6 февраля 2019 .
  202. ^ "Объявление на GitHub об отказе от поддержки HPHPc" . Проверено 24 мая 2013 .
  203. ^ "Лицензия PHP, версия 3.01" . Проверено 20 мая 2010 .
  204. ^ «Несовместимые с GPL лицензии свободных программ» . Различные лицензии и комментарии о них . Фонд свободного программного обеспечения . Проверено 3 января 2011 .
  205. ^ «PHP: список функций и методов - Руководство» . Группа PHP . Проверено 14 января 2015 .
  206. ^ «Введение - Руководство» . php.net . 2013-06-07 . Проверено 13 июня 2013 .
  207. Дэррил Паттерсон (5 августа 2004 г.). «Упростите бизнес-логику с помощью PHP DataObjects - O'Reilly Media» . ibm.com . Проверено 16 декабря 2014 .
  208. ^ "IBM - Соединенные Штаты" . Проверено 16 декабря 2014 .
  209. ^ «Пять распространенных проблем с базой данных PHP» . ibm.com . 2006-08-01 . Проверено 13 июня 2013 .
  210. ^ «IBM Redbooks - Разработка приложений PHP для серверов данных IBM» . redbooks.ibm.com . Проверено 16 декабря 2014 .
  211. ^ "Журнал php [архитектор] - Журнал для программистов PHP" . www.phparch.com .
  212. ^ Криль, Пол (19 октября 2005). «PHP завоевывает популярность на предприятиях, конкурируя с Java» . InfoWorld . Архивировано из оригинального 13 июля 2014 года.
  213. ^ «Перекрестная ссылка: / PHP_5_4 / ext / standard /» . php.net . Архивировано из оригинального 16 марта 2012 года . Проверено 16 декабря 2014 .
  214. ^ «Разработка собственных расширений PHP» . devnewz.com . 2002-09-09. Архивировано из оригинала на 2008-02-18 . Проверено 25 февраля 2008 .
  215. ^ "Почему Зефир?" . zephir-lang.com . 2015-10-20 . Проверено 14 декабря 2015 .
  216. ^ «Кредиты PHP» . Проверено 16 декабря 2018 .
  217. ^ «Изучите PHP через обучение PHP и сертификацию PHP» . www.zend.com . Проверено 16 ноября 2020 .
  218. ^ a b «Общие рекомендации по установке» . php.net . Проверено 22 сентября 2013 .
  219. ^ "Архив новостей: Выпущен PHP 5.3.3!" . php.net . 2010-07-22.
  220. ^ "Менеджер процессов FastCGI (FPM)" . php.net . Проверено 22 сентября 2013 .
  221. ^ «Использование командной строки: Введение» . php.net . Проверено 22 сентября 2013 .
  222. ^ «Использование командной строки: отличия от других SAPI» . php.net . Проверено 22 сентября 2013 .
  223. ^ a b «Общие рекомендации по установке» . php.net . Проверено 22 сентября 2013 .
  224. ^ «PHP: Apache 2.x в Microsoft Windows» . php.net . Архивировано из оригинала на 2013-09-26 . Проверено 22 сентября 2013 .
  225. ^ «Использование командной строки: Введение» . php.net . Проверено 22 сентября 2013 .
  226. ^ «Установка PHP-GTK 2» . php.net . Проверено 22 сентября 2013 .
  227. ^ «AWS SDK для PHP» . aws.amazon.com . Проверено 6 марта 2014 .
  228. ^ «Windows Azure SDK для PHP - Мосты взаимодействия и Центр лабораторий» . interoperabilitybridges.com . Архивировано из оригинала на 2014-03-20 . Проверено 6 марта 2014 .
  229. ^ «Конфигурация времени выполнения: Оглавление» . php.net . Проверено 22 сентября 2013 .
  230. ^ "Директивы php.ini: Список директив php.ini" . php.net . Проверено 22 сентября 2013 .
  231. ^ «Конфигурация времени выполнения: файл конфигурации» . PHP.net . Проверено 22 сентября 2013 .
  232. ^ "Директивы php.ini: Список разделов php.ini" . PHP.net . Проверено 22 сентября 2013 .
  233. ^ «Конфигурация времени выполнения: где могут быть установлены параметры конфигурации» . PHP.net . Проверено 22 сентября 2013 .
  234. ^ "Ручная обработка изображений PHP и GD;" . php.net . Проверено 9 апреля 2011 .
  235. ^ «PHP серверный язык сценариев» . Университет Индианы . 2007-04-04. Архивировано из оригинала на 2016-01-21 . Проверено 25 февраля 2008 .
  236. ^ «Технология JavaServer Pages - Методы сравнения страниц JavaServer для серверной документации с динамическим содержимым» . Sun Microsystems . Проверено 25 февраля 2008 .
  237. ^ «Пять простых способов настроить ваше приложение LAMP» . 2011-01-25.
  238. ^ «PHP в основе: структура расширения» . PHP.net . Проверено 22 сентября 2013 .
  239. ^ «PHP в основе: расширение счетчика - продолжающийся пример» . PHP.net . Проверено 22 сентября 2013 .
  240. ^ «Написание расширений, часть I: Введение в PHP и Zend» . Zend Technologies . 2005-03-01. Архивировано из оригинала на 2013-09-24 . Проверено 22 сентября 2013 .
  241. ^ «Написание расширений, часть II: параметры, массивы и ZVAL» . Zend Technologies . 2005-06-06. Архивировано из оригинала на 2013-09-26 . Проверено 22 сентября 2013 .
  242. ^ «Написание расширений, часть II: параметры, массивы и ZVAL (продолжение)» . Zend Technologies . 2005-06-06. Архивировано из оригинала на 2013-09-26 . Проверено 22 сентября 2013 .
  243. ^ "Написание расширений Часть III: Ресурсы" . Zend Technologies . 12 мая 2006 г. Архивировано из оригинала на 2013-09-26 . Проверено 22 сентября 2013 .
  244. ^ «Обертывание классов C ++ в расширении PHP» . Zend Technologies . 2009-04-22. Архивировано из оригинала на 2013-09-20 . Проверено 22 сентября 2013 .
  245. ^ "Расширение PHP с помощью C ++?" . Переполнение стека . Проверено 22 сентября 2013 .
  246. ^ "Как я могу использовать код C ++ для взаимодействия с PHP?" . Переполнение стека . Проверено 22 сентября 2013 .
  247. ^ Golemon, Sara (2006). Расширение и встраивание PHP . ISBN 978-0-672-32704-9.
  248. ^ «Запрос об ошибке № 46919: Многопоточность» . PHP.net . Проверено 22 сентября 2013 .
  249. ^ "pthreads: Введение (Руководство по PHP)" . PHP.net . Проверено 22 сентября 2013 .
  250. ^ "PECL :: Package :: pthreads" . pecl.php.net . Проверено 9 февраля 2014 .
  251. ^ "Руководство: Требования к установке # PHP" . MediaWiki. 2010-01-25 . Проверено 26 февраля 2010 . PHP - это язык программирования, на котором написана MediaWiki [...]
  252. ^ «О WordPress» . Проверено 26 февраля 2010 . WordPress был [...] построен на PHP
  253. ^ Kempkens, Алекс. «Joomla! - Система управления контентом для создания веб-сайтов и приложений» .
  254. ^ «PHP и Drupal» . Drupal.org . Проверено 13 июня 2010 .
  255. ^ "О" . Moodle.org . Проверено 20 декабря 2009 .
  256. ^ "Серверные требования SilverStripe" . Архивировано из оригинального 28 ноября 2014 года . Проверено 13 октября 2014 года . SilverStripe требует PHP 5.3.2+
  257. ^ «PHP и Facebook | Facebook» . Blog.facebook.com . Проверено 29 июля 2009 .
  258. ^ «PHP и Digg» . О'Рейли . Проверено 13 июня 2010 .
  259. ^ «Развертывание PHP 7 в Dailymotion» . Инженерный блог Dailymotion . 3 октября 2016 г.
  260. ^ «PHP 7 в Tumblr» . Tumblr Engineering . 4 ноября 2016 г.
  261. Перейти ↑ Ide, Andy (31.01.2013). «PHP просто растет и растет» . Проверено 1 апреля 2013 .
  262. ^ «Использование серверных языков программирования для веб-сайтов» . W3Techs. 2020-03-12 . Проверено 12 марта 2020 .
  263. ^ «Статистика использования и рыночная доля PHP для веб-сайтов, апрель 2020 г.» . w3techs.com . Проверено 23 апреля 2020 .
  264. ^ «Статистика использования и рыночная доля PHP версии 7 для веб-сайтов, апрель 2020 г.» . w3techs.com . Проверено 23 апреля 2020 .
  265. ^ "Национальная база данных уязвимостей (NVD) Статистика уязвимостей поиска" . Проверено 22 ноября 2019 .
  266. ^ "PHP Taint Mode RFC" .
  267. ^ «Заметки о встрече разработчиков, ноябрь 2005 г.» .
  268. ^ «Решение о режиме заражения, ноябрь 2007 г.» . Архивировано из оригинала на 2009-02-26.
  269. ^ «Проект Hardened-PHP» . 2008-08-15. Архивировано из оригинала на 2019-02-24 . Проверено 22 августа 2019 .
  270. ^ "Безопасность: Использование глобальных регистров" . Руководство по PHP . PHP.net . Проверено 22 сентября 2013 .
  271. ^ «Волшебные цитаты» . Руководство по PHP . PHP.net . Проверено 17 января 2014 .
  272. ^ " Директива конфигурации " двигателя "" . PHP: конфигурация времени выполнения . PHP.net . Проверено 13 февраля 2014 .
  273. ^ «Эксплойт безопасности PHP с изображениями GIF» . 2007-06-22. Архивировано из оригинала на 2013-09-27 . Проверено 22 сентября 2013 .
  274. ^ "Эксплойт безопасности PHP с изображениями GIF" . Блог о классах PHP. 2007-06-20 . Проверено 22 сентября 2013 .
  275. ^ «Передача вредоносного PHP через getimagesize ()» . 2007-06-04. Архивировано из оригинала на 2013-09-21 . Проверено 22 сентября 2013 .
  276. ^ " ' Enable_dl' конфигурации директивы" . PHP: конфигурация времени выполнения . PHP.net . Проверено 13 февраля 2014 .
  277. ^ "Справочник по функциям PHP: dl ()" . PHP.net . Проверено 22 сентября 2013 .
  278. ^ «Мой хост не будет исправлять своего трояна» . Обсуждение веб-хостинга . Проверено 22 сентября 2013 .
  279. ^ Raz0r. "Форум Simple Machines <= 2.0.3 Сброс пароля администратора" .
  280. ^ Nibble Security. "TYPO3-SA-2010-020, TYPO3-SA-2010-022 ОБЪЯСНЕНИЕ" .
  281. ^ Ahack.ru. "Криптостойкость и небезопасное сравнение" .
  282. ^ «Операторы сравнения» . PHP.net.
  283. ^ Павел Кравчик (2013). «Наиболее распространенные атаки на веб-приложения» . IPSec.pl. Архивировано из оригинала на 2015-04-15 . Проверено 15 апреля 2015 .
  284. ^ Павел Кравчик (2013). «Итак, каковы« самые критические »недостатки приложения? В новом OWASP Top 10» . IPSec.pl . Проверено 15 апреля 2015 .

Дальнейшее чтение [ править ]

Послушайте эту статью ( 35 минут )
Разговорный значок Википедии
Этот аудиофайл был создан на основе редакции этой статьи от 23 ноября 2011 г. и не отражает последующих правок. ( 2011-11-23 )
  • Официальный веб-сайт
  • Пол Форд (11 июня 2015 г.). "Что такое Код?" . Bloomberg Businessweek . Какой минимум я должен знать о PHP?
  • PHP в Curlie