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

PHP - это язык сценариев общего назначения, особенно подходящий для веб-разработки . [5] Первоначально он был создан датско-канадским программистом Расмусом Лердорфом в 1994 году. [6] Эталонная реализация PHP сейчас производится группой PHP. [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 ( строка  $ name ,  частная  строка  $ course ) { родитель :: __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 в байт-код Common Intermediate Language (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. ^ a b Лердорф, Расмус (2007-04-26). «PHP на гормонах - история презентации PHP Расмуса Лердорфа на конференции MySQL в Санта-Кларе, Калифорния» . Сеть разговоров . Проверено 11 декабря 2009 .
  2. ^ «Список изменений PHP 8» . 4 февраля 2021 . Проверено 5 февраля 2021 года .
  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. ^ Расмус Лердорф (2010-03-11). «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-движок с большим улучшением производительности" . 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 Failure on Overflow" . 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. Гилмор, У. Джейсон (23 января 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. ^ Иде, Энди (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 .

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

  • Официальный веб-сайт
  • Пол Форд (11 июня 2015 г.). "Что такое Код?" . Bloomberg Businessweek . Каков абсолютный минимум, который я должен знать о PHP?
  • PHP в Curlie