stringtranslate.com

PHP

PHP — это язык сценариев общего назначения , предназначенный для веб-разработки . [8] Первоначально он был создан датско-канадским программистом Расмусом Лердорфом в 1993 году и выпущен в 1995 году . [9] [10] Эталонная реализация PHP сейчас производится PHP Group. [11] Первоначально PHP был аббревиатурой Personal Home Page , [12] [13] , но теперь он означает рекурсивный инициализм PHP: Препроцессор гипертекста . [14]

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

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

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

W3Techs сообщает, что по состоянию на 2024 год PHP используется на 76,6% всех веб-сайтов, язык программирования которых можно определить, и 58,8% из них используют PHP 7, который устарел и известен как небезопасный. [18] Кроме того, наиболее используемая версия 8.x, 8.0, больше не поддерживается, [19] это означает, что подавляющее большинство пользователей PHP используют устаревшие версии, и более половины всех веб-сайтов, использующих PHP или нет (чьи язык программирования может быть определен) небезопасны.

История

История ранних веков

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

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

<!-- включить  / текст / заголовок . html --><!-- getenv  HTTP_USER_AGENT --> <!-- if  substr  $exec_result  Mozilla -->  Эй ,  вы  используете  Netscape !< p > <!-- endif --  ><!-- база данных sql  select * from table , где user = ' $username' --> <!-- ifless $numentries 1 --> Извините , эта запись не существует < p > <!-- endif exit --> Добро пожаловать <!-- $user -->!< p > У вас осталось <!-- $index : 0 --> кредитов на вашем счету .< p >                         <!-- включить  / текст / нижний колонтитул . html -->

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

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

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

PHP 3 и 4

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

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

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

PHP 5

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

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

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

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

PHP 6 и Юникод

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

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

PHP 7

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

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

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

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

PHP 8

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

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

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

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

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

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

Типовые изменения и дополнения

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

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

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

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

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

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

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

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

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

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

PHP 8.1

PHP 8.1 был выпущен 25 ноября 2021 года. [87] В него добавлена ​​поддержка перечислений (также называемых «перечислениями»), объявления свойств как readonly(что предотвращает изменение свойства после инициализации) и распаковки массива с помощью строковых ключей. Новый тип Never можно использовать для указания того, что функция не возвращает результат. [88]

PHP 8.2

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

История выпусков

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

Талисман

elePHPant, талисман PHP

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

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

Синтаксис

Приложение «Hello World» на PHP 7.4, работающее на встроенном сервере разработки.

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

<!DOCTYPE html> < html >  < head >  < title > PHP "Hello, World!" программа </ title >  </ head >  < body > < p > <? = 'Привет, мир!' ?> </ p > </ body > </ html >    

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

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

Интерпретатор PHP выполняет код PHP только внутри своих разделителей . Все, что находится за пределами разделителей, не обрабатывается PHP, хотя текст, отличный от PHP, по-прежнему подчиняется структурам управления, описанным в коде PHP. Наиболее распространенными разделителями являются <?phpоткрытие и ?>закрытие разделов PHP. Сокращенная форма <?также существует. Этот короткий разделитель делает файлы сценариев менее переносимыми, поскольку их поддержка может быть отключена в локальной конфигурации PHP и поэтому не рекомендуется. [208] [209] И наоборот, нет никаких рекомендаций против короткого тега echo <?=. [210] До PHP 5.4.0 этот короткий синтаксис echoработал только при short_open_tagвключенной настройке конфигурации, тогда как для PHP 5.4.0 и более поздних версий он всегда доступен. [211] [212] [208] Целью всех этих разделителей является отделение кода PHP от содержимого, не относящегося к PHP, такого как код JavaScript или разметка HTML. [213] Итак самое короткое «Hello, World!» программа , написанная на PHP:

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

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

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

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

<?php  $name  =  'Джон' ;  // объявляемая и инициализируемая переменная строкового типа  $age  =  18 ;  // объявляемая и инициализируемая переменная целочисленного типа  $height  =  5.3 ;  // объявляется и инициализируется переменная типа double  echo  $name  .  ' является '  .  $высота  .  "м рост \n " ;  // объединение переменных и строк  echo  " $name исполнилось $age лет." ;  // интерполируем переменные в строку ?>

В отличие от имен функций и классов, имена переменных чувствительны к регистру. Как строки в двойных кавычках (""), так и строки Heredoc предоставляют возможность интерполировать значение переменной в строку. [215] PHP воспринимает новую строку как пробел , как в языке свободной формы , а операторы завершаются точкой с запятой. [216] PHP имеет три типа синтаксиса комментариев : /* */помечает блочные и встроенные комментарии; //или #используются для однострочных комментариев. [217] Этот echoоператор — одно из нескольких средств, предоставляемых PHP для вывода текста. [ нужна цитата ]

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

Типы данных

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

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

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

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

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

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

Функции

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

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

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

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

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

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

функция  getAdder ( $x )  {  return  fn ( $y )  =>  $x  +  $y ; }$adder  =  getAdder ( 8 ); эхо  $adder ( 2 );  // печатает "10"

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

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

функция  getAdder ( int  $x ) :  Closure {  return  fn ( int  $y ) :  int  =>  $x  +  $y ; }$adder  =  getAdder ( 8 ); эхо  $adder ( 2 );  // печатает «10» echo  $adder ( null );  // выдает исключение, поскольку был передан неверный тип $adder  =  getAdder ([]);  // также вызовет исключение

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

PHP-объекты

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

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

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

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

Пример

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

<?phpабстрактный  класс  Пользователь{ защищенная  строка  $name ; публичная  функция  __construct ( строка  $name ) { // делаем первую букву заглавной, а остальные строчными $this -> name  =  ucfirst ( strtolower ( $name )); } публичная  функция  Greeting () :  строка { вернуть  «Привет, меня зовут»  .  $this -> имя ; } абстрактная  публичная  функция  job () :  string ;}класс  Студент  расширяет  Пользователь{ публичная  функция  __construct ( строка  $name ,  частная  строка  $course ) { родитель :: __construct ( $name ); } публичная  функция  job () :  строка { вернуть  «Я учусь»  .  $this -> курс ; }} Учитель  класса расширяет  права пользователя{ публичная  функция  __construct ( строка  $name ,  частный  массив  $teachingCourses ) { родитель :: __construct ( $name ); } публичная  функция  job () :  строка { вернуть  «Я преподаю»  .  implode ( ", " ,  $this -> LearningCourses ); }}$студенты  =  [ новый  студент ( «Алиса» ,  «Информатика» ), новый  студент ( «Боб» ,  «Информатика» ), новый  студент ( «Чарли» ,  «Бизнес-исследования» ),];$учителя  =  [ новый  Учитель ( «Дэн» ,  [ «Информатика» ,  «Информационная безопасность» ]), новый  учитель ( «Эрин» ,  [ «Информатика» ,  «Программирование 3D-графики» ]), новый  преподаватель ( «Фрэнки» ,  [ «Интернет-маркетинг» ,  «Бизнес-исследования» ,  «Электронная коммерция» ]),];foreach  ([ $students ,  $teachers ]  as  $users )  { echo  $users [ 0 ] :: класс  .  "с: \п " ; array_walk ( $users ,  функция  ( пользователь  $user )  { echo  " { $user -> Greeting () } , { $user -> job () } \n " ; });}

Эта программа выводит следующее:

Студенты:Здравствуйте, меня зовут Алиса, я изучаю информатику.Здравствуйте, меня зовут Боб, я изучаю информатику.Здравствуйте, меня зовут Чарли, я изучаю бизнес-исследования.Учителя:Здравствуйте, меня зовут Дэн, я преподаю информатику, информационную безопасность.Здравствуйте, меня зовут Эрин, я преподаю информатику, программирование 3D-графики.Здравствуйте, меня зовут Фрэнки, я преподаю онлайн-маркетинг, бизнес-исследования, электронную коммерцию.

Реализации

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

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

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

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

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

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

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

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

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

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

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

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

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

Фонд PHP

26 ноября 2021 года блог JetBrains объявил о создании The PHP Foundation, который будет спонсировать проектирование и разработку PHP. [256]

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

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

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

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

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

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

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

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

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

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

Использовать

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

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

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

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

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

Для конкретных и более сложных сценариев использования PHP предлагает четко определенный и документированный способ написания пользовательских расширений на C или C++ . [277] [278] [279] [280] [281] [282] [283] [ необходим неосновной источник ] Помимо расширения самого языка в виде дополнительных библиотек , расширения предоставляют возможность повысить скорость выполнения там, где это необходимо. имеет решающее значение, и есть возможности для улучшений за счет использования настоящего компилируемого языка . [284] [285] PHP также предлагает четко определенные способы встраивания в другие программные проекты. Таким образом, PHP можно легко использовать в качестве внутреннего языка сценариев для другого проекта, обеспечивая при этом тесный интерфейс с конкретными внутренними структурами данных проекта . [286]

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

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

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

Доля использования версий PHP на 23 февраля 2024 г.:
через три месяца после выпуска PHP 8.3 [18] [290] [291] [292] [293]

  PHP 8.3: 1,40% от PHP 8 (0,35%)
  PHP 8.2: 17,1% от PHP 8 (4,29%)
  PHP 8.1: 40,0% от PHP 8 (10,04%)
  PHP 8.0: 41,5% от PHP 8 (10,42%)
  PHP 7.4: 68,4% от PHP 7 (39,74%)
  PHP 7.3: 13,5% от PHP 7 (7,84%)
  PHP 7.2: 9,80% от PHP 7 (5,69%)
  PHP 7.1: 4,00% от PHP 7 (2,32%)
  PHP 7.0: 4,30% от PHP 7 (2,50%)
  PHP 5.6: 54,0% от PHP 5 (8,9640%)
  PHP 5.5: 8,40% от PHP 5 (1,3944%)
  PHP 5.4: 15,4% от PHP 5 (2,5564%)
  PHP 5.3: 14,9% от PHP 5 (2,4734%)
  PHP 5.2: 6,80% от PHP 5 (1,1288%)
  PHP 5.1: 0,40% от PHP 5 (0,0664%)
  PHP 5.0: 0,10% от PHP 5 (0,0166%)
  PHP 4.4: 78,7% от PHP 4 (0,1574%)
  PHP 4.3: 18,5% от PHP 4 (0,0370%)
  PHP 4.2: 1,70% от PHP 4 (0,0034%)
  PHP 4.1: 0,90% от PHP 4 (0,0018%)
  PHP 4.0: 0,30% от PHP 4 (0,0006%)

PHP используется для систем управления веб-контентом , включая MediaWiki , [294] WordPress , [295] Joomla , [296] Drupal , [297] Moodle , [298] eZ Publish , eZ Platform и SilverStripe . [299]

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

По состоянию на 23 февраля 2024 г. (через три месяца после выпуска PHP 8.3) PHP используется в качестве языка программирования на стороне сервера на 76,5% веб-сайтов, язык которых можно определить; PHP 7 является наиболее используемой версией языка: 58,1% веб-сайтов, использующих PHP, используют эту версию, 25,1% используют PHP 8, 16,6% используют PHP 5 и 0,2% используют PHP 4. [18]

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

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

Существуют исправления расширенной защиты, такие как Suhosin и Hardening -Patch, специально разработанные для сред веб-хостинга. [306]

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

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

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

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

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

По состоянию на 23 февраля 2024 г. (через три месяца после выпуска PHP 8.3) W3Techs сообщает, что 85,32% веб-сайтов, использующих PHP, используют версии 8.0 или старше (которые больше не поддерживаются командой разработчиков PHP). [322] PHP версии 5 по-прежнему используется на 16,6% всех веб-сайтов. [291] Настоятельно рекомендуется перейти на PHP 8.1 или более позднюю версию и использовать random_int()[323] вместо rand()[324] или mt_rand(), [325] , поскольку последние функции не являются криптографически безопасными. Существует две атаки, которые можно осуществить на источники энтропии PHP: «начальная атака» и «атака восстановления состояния». [ нужна ссылка ] С нынешним [ когда? ] GPU, злоумышленник может выполнять до 2 30 вычислений MD5 в секунду с помощью графического процессора стоимостью 250 долларов, а с дополнительными 500 долларами — до 2 32 вычислений. [326] В сочетании с « атакой на день рождения » это может привести к серьезным уязвимостям безопасности. [ нужна цитата ]

Смотрите также

Рекомендации

  1. ^ аб Лердорф, Расмус (8 июня 1995 г.). «Анонс: инструменты личной домашней страницы (инструменты PHP)» . Проверено 7 июня 2011 г.
  2. ^ аб Лердорф, Расмус (26 апреля 2007 г.). «PHP на гормонах - история презентации PHP Расмусом Лердорфом на конференции MySQL в Санта-Кларе, Калифорния». Сеть разговоров. Архивировано из оригинала 6 января 2019 г. Проверено 11 декабря 2009 г.
  3. ^ "PHP: Архив новостей - 2024" . www.php.net .
  4. ^ «PHP: Аргументы функции – Руководство» . Secure.php.net .
  5. ^ «PHP: Архивы выпусков (музей)» . музей.php.net .
  6. ^ «PHP: Предисловие – Руководство».
  7. ^ Стогов, Дмитрий [@dstogov] (4 декабря 2015 г.). «Не секрет, что некоторые идеи по оптимизации #PHP7 пришли из HHVM, LuaJIT и V8. Спасибо @HipHopVM @SaraMG. #php7thankyou» ( твит ) – через Twitter .
  8. ^ «PHP: Препроцессор гипертекста» . www.php.net . Проверено 12 февраля 2020 г.
  9. ^ Аб Крилль, Пол (18 ноября 2013 г.). «Верьте шумихе: основатель PHP поддерживает технологию Facebook HipHop». Инфомир . Проверено 13 октября 2022 г.
  10. ^ «Объявление: инструменты личной домашней страницы (инструменты PHP)» . groups.google.com . Проверено 3 ноября 2022 г.
  11. ^ abcdefghi «История PHP и связанных с ним проектов». Группа PHP . Проверено 25 февраля 2008 г.
  12. ^ ab «История PHP». php.net .
  13. ^ Олссон, Микаэль (04 сентября 2013 г.). Краткое руководство по написанию сценариев PHP. Апресс. ISBN 978-1-4302-6284-8.
  14. ^ Руководство по PHP: Предисловие, www.php.net.
  15. ^ «Введение: что может PHP?». Руководство по PHP . Проверено 5 марта 2009 г.
  16. ^ вертолет: порт node-ar-drone, который позволяет пользователю управлять дроном Parrot AR через PHP: jolicode/php-ar-drone, JoliCode, 11 января 2019 г. , получено 23 февраля 2019 г.
  17. ^ ab «Встраивание PHP в HTML». О'Рейли. 3 мая 2001 г. Архивировано из оригинала 19 февраля 2008 г. Проверено 25 февраля 2008 г.
  18. ^ abc «Статистика использования PHP для веб-сайтов». W3Techs – Обзоры технологий Всемирной паутины . W3Techs . Проверено 23 февраля 2024 г.
  19. ^ «Статистика использования и рыночная доля PHP версии 8 для веб-сайтов, февраль 2024 г.» . w3techs.com . Проверено 13 февраля 2024 г.
  20. ^ Лердорф, Расмус (20 июля 2012 г.). «Интересно, почему люди продолжают писать, что PHP когда-либо был написан на Perl. Этого никогда не было. #php». Твиттер . Проверено 4 сентября 2014 г.
  21. ^ Лердорф, Расмус (26 апреля 2007 г.). «PHP на гормонах». Сеть разговоров. Архивировано из оригинала (mp3) 6 января 2019 г. Проверено 22 июня 2009 г.
  22. ^ Лердорф, Расмус (2007). «Слайд 3». слайды к докладу «PHP о гормонах» . Группа PHP . Проверено 22 июня 2009 г.
  23. ^ Лердорф, Расмус (1995-06-08). «Анонс: инструменты личной домашней страницы (инструменты PHP)» . Группа новостей : comp.infosystems.www.authoring.cgi . Проверено 17 сентября 2006 г.
  24. ^ «Расмус Лердорф, старший технический специалист Yahoo: PHP, за микрофоном» . 19 ноября 2003 г. Архивировано из оригинала 28 июля 2013 г.
  25. ^ Альшетви, AB; Рахмат, РААО; Борхан, Миннесота; Исмаэль, С.; Али, А.; Иртема, ХИМ; Альфахрия, AY (2018). «Интернет-экспертная система для оптимизации дорожного движения в развивающихся странах» . Проверено 13 февраля 2024 г.
  26. ^ «Проблемы с PHP» . Проверено 20 декабря 2010 г.
  27. ^ "php.internals: Re: Согласованность имени функции" . news.php.net . 28 декабря 2013 г. Проверено 9 февраля 2014 г.
  28. Расмус Лердорф (16 декабря 2013 г.). «Re: Гибкое именование функций». Группа новостей : php.internals . Проверено 26 декабря 2013 г.
  29. ^ "PHP - аббревиатура, означающая голосование" . PHP.net . Архивировано из оригинала 15 августа 2000 года.
  30. ^ «Zend Engine версии 2.0: обзор функций и дизайн» . Zend Technologies Ltd. Архивировано из оригинала 19 июля 2006 г. Проверено 17 сентября 2006 г.
  31. ^ "Архив новостей php.net за 2007 год" . Группа PHP. 13 июля 2007 г. Проверено 22 февраля 2008 г.
  32. ^ Кернер, Шон Майкл (1 февраля 2008 г.). «PHP 4 мертв — да здравствует PHP 5». ИнтернетНовости. Архивировано из оригинала 6 августа 2018 г. Проверено 16 декабря 2018 г.
  33. ^ Трахтенберг, Адам (15 июля 2004 г.). «Почему PHP 5 хорош!». О'Рейли. Архивировано из оригинала 31 марта 2016 г. Проверено 22 февраля 2008 г.
  34. ^ «Позднее статическое связывание в PHP». Цифровой сэндвич. 23 февраля 2006 г. Проверено 25 марта 2008 г.
  35. ^ «Статическое ключевое слово». Группа PHP . Проверено 25 марта 2008 г.
  36. ^ "GoPHP5" . Архивировано из оригинала 17 июля 2011 г.
  37. ^ «Проекты PHP объединяют усилия для перехода на PHP 5» (PDF) . Пресс-релиз GoPHP5 . Архивировано из оригинала (PDF) 4 августа 2019 г. Проверено 23 февраля 2008 г.
  38. ^ "GoPHP5" . GoPHP5. Архивировано из оригинала 27 апреля 2011 г. Проверено 22 февраля 2008 г.
  39. ^ «Установка и настройка PHP» . php.net . Проверено 29 октября 2013 г.
  40. ^ «PHP для Windows: выпуски двоичных файлов и исходных кодов (5.3)» . php.net . Проверено 29 октября 2013 г.
  41. ^ «PHP для Windows: выпуски двоичных файлов и исходных кодов (5.4)» . php.net . Проверено 29 октября 2013 г.
  42. ^ «PHP для Windows: выпуски двоичных файлов и исходного кода (5.5)» . php.net . Проверено 29 октября 2013 г.
  43. ^ «PHP: Поддерживаемые версии» .
  44. ^ «Типы: строки (Руководство PHP)» . PHP.net . Проверено 22 сентября 2013 г.
  45. ^ «Подробная информация о строковом типе (Руководство PHP)» . PHP.net . Проверено 22 сентября 2021 г.
  46. ^ Андрей Змиевский (10 августа 2005 г.). «Документ по проектированию поддержки PHP Unicode» (список рассылки) . Проверено 9 февраля 2014 г.
  47. ^ «PHP 5.5 или 6.0» . Проверено 9 февраля 2014 г.
  48. ^ Андрей Змиевский (22 апреля 2011 г.). «Хороший, плохой и злой: что случилось с Unicode и PHP 6» . Проверено 9 февраля 2014 г.
  49. ^ Расмус Лердорф (11 марта 2010 г.). «PHP 6» (список рассылки) . Проверено 7 февраля 2014 г.
  50. ^ «Бесконечные дебаты о маппетах между PHP 6 и PHP 7» . Архивировано из оригинала 19 ноября 2015 г. Проверено 19 ноября 2015 г.
  51. ^ «RFC: Название следующей версии PHP» . php.net . 07.07.2014 . Проверено 15 июля 2014 г.
  52. ^ «Re: [PHP-DEV] [VOTE] [RFC] Название следующей версии PHP (снова)» . 30 июля 2014 г. Проверено 30 июля 2014 г.
  53. ^ «phpng: обновленный PHP-движок с большим улучшением производительности» . news.php.net .
  54. ^ "PHP: rfc:phpng" . php.net . Проверено 16 декабря 2014 г.
  55. ^ ab "PHP: phpng". php.net . Проверено 15 июля 2014 г.
  56. ^ «Объединить ветку ZendEngine3» . github.com . 05.12.2014 . Проверено 5 декабря 2014 г.
  57. ^ abc «PHP: Процесс выпуска». 20 июня 2011 г. Проверено 6 октября 2013 г.
  58. ^ ab «PHP RFC: исключения в движке (для PHP 7)» . php.net . Проверено 21 мая 2015 г.
  59. ^ ab «PHP RFC: унифицированный синтаксис переменных». php.net . 31 мая 2014 г. Проверено 30 июля 2014 г.
  60. ^ «Онлайн-редактор PHP | вывод для udRhX» . 3v4l.org .
  61. ^ «PHP RFC: исправлено поведение foreach» . php.net . Проверено 21 мая 2015 г.
  62. ^ «PHP RFC: поведение конструктора внутренних классов» . php.net . Проверено 21 мая 2015 г.
  63. ^ «PHP RFC: Удаление мертвых или еще не перенесенных на PHP7 SAPI и расширений» . php.net . Проверено 21 мая 2015 г.
  64. ^ «PHP RFC: исправлено несоответствие поведения list()» . php.net . Проверено 21 мая 2015 г.
  65. ^ «PHP RFC: удалить альтернативные теги PHP» . php.net . Проверено 21 мая 2015 г.
  66. ^ «PHP RFC: сделать определение нескольких случаев по умолчанию в переключателе синтаксической ошибкой» . php.net . Проверено 21 мая 2015 г.
  67. ^ «PHP RFC: удалить поддержку шестнадцатеричного кода в числовых строках» . php.net . Проверено 21 мая 2015 г.
  68. ^ ab «PHP RFC: целочисленная семантика». php.net . Проверено 21 мая 2015 г. Если NaN и Infinity всегда становятся равными нулю при приведении к целому числу, это означает большую межплатформенную согласованность, а также менее удивительно, чем то, что происходит в настоящее время.
  69. ^ «PHP RFC: сбой ZPP при переполнении» . php.net . Проверено 21 мая 2015 г.
  70. ^ abc «RFC: Типы возвращаемых данных». php.net . 27 января 2015 г. Проверено 28 января 2015 г.
  71. ^ abcdef «RFC: Объявления скалярных типов». php.net . 16 марта 2015 г. Проверено 17 марта 2015 г.
  72. ^ abcdefg Брент. «Что нового в PHP 8». Сшиватель . Проверено 22 сентября 2020 г.
  73. ^ «Выпущен PHP 8» . PHP . Проверено 27 ноября 2020 г.
  74. ^ ab "PHP: rfc:jit". wiki.php.net . Проверено 5 апреля 2019 г.
  75. ^ Брент. «PHP 8: производительность JIT в реальных веб-приложениях». Сшиватель.io . Проверено 4 октября 2020 г.
  76. ^ Ретамс, Дерик. «PHP 8: краткий обзор JIT».
  77. ^ аб Попов, Никита. «Что нового в PHP 8.0?» Никита Попов». PHP по пятницам. Архивировано из оригинала 11 декабря 2021 г. Проверено 4 октября 2020 г.
  78. Даниэле, Карло (25 мая 2020 г.). «Что нового в PHP 8 (функции, улучшения и JIT-компилятор)». Кинста . Проверено 24 декабря 2020 г.
  79. Редмонд, Пол (15 июля 2020 г.). «Выражение соответствия появится в PHP 8». Новости Ларавел . Проверено 4 октября 2020 г.
  80. ^ «PHP 8.0: Соответствующие выражения» . PHP Смотреть . Проверено 4 октября 2020 г.
  81. Барнс, Эрик (27 ноября 2020 г.). «PHP 8 уже выпущен!». Новости Ларавел . Проверено 24 декабря 2020 г.
  82. ^ ab «PHP RFC: выражение throw». wiki.php.net . Проверено 14 августа 2020 г.
  83. ^ ab «PHP RFC: оператор Nullsafe». wiki.php.net . Проверено 14 августа 2020 г.
  84. ^ ab "PHP: rfc:weakrefs". wiki.php.net . Проверено 5 апреля 2019 г.
  85. ^ Торговец, Амит (13 июня 2020 г.). «Эти новые строковые функции появятся в PHP 8». Амит Мерчант . Проверено 4 октября 2020 г.
  86. ^ Попов, Никита. «Призыв к участию: аннотирование аргументов внутренней функции и типов возвращаемых значений». Внешние . Проверено 19 ноября 2020 г. .
  87. ^ "Журнал изменений PHP 8" . PHP.net . Проверено 5 января 2024 г.
  88. ^ «PHP: Объявление о выпуске PHP 8.1.0» . PHP.net . Проверено 5 января 2024 г.
  89. ^ "Журнал изменений PHP 8" . PHP.net . Проверено 5 января 2024 г.
  90. ^ «PHP: Объявление о выпуске PHP 8.2.0» . PHP.net . Проверено 5 января 2024 г.
  91. ^ abcdefghijkl «Неподдерживаемые ветки». php.net . Проверено 31 июля 2019 г.
  92. ^ «Выпущен PHP 4.0.0» . Проверено 25 октября 2020 г.
  93. ^ abcd «PHP: Журнал изменений PHP 4». Группа PHP. 3 января 2008 г. Проверено 22 февраля 2008 г.
  94. ^ «Объявление о выпуске PHP 4.1.0» . Проверено 25 октября 2020 г.
  95. ^ «Объявление о выпуске PHP 4.2.0» . Проверено 25 октября 2020 г.
  96. ^ «Объявление о выпуске PHP 4.3.0» . Проверено 25 октября 2020 г.
  97. ^ «Использование PHP из командной строки». Руководство по PHP . Группа PHP . Проверено 11 сентября 2009 г.
  98. ^ «Объявление о выпуске PHP 4.4.0» . Проверено 25 октября 2020 г.
  99. ^ «Объявление о выпуске PHP 4.4.0» . Руководство по PHP . Группа PHP . Проверено 24 ноября 2013 г.
  100. ^ "Выпущен PHP 5.0.0!" . Проверено 25 октября 2020 г.
  101. ^ abc «PHP: Журнал изменений PHP 5» . Группа PHP. 08.11.2007 . Проверено 22 февраля 2008 г.
  102. ^ «Объявление о выпуске PHP 5.1.0» . Проверено 25 октября 2020 г.
  103. ^ «Руководство по PHP: PDO» . Группа PHP. 15 ноября 2011 г. Проверено 15 ноября 2011 г.
  104. ^ «Объявление о выпуске PHP 5.2.0» . Проверено 25 октября 2020 г.
  105. ^ «Объявление о выпуске PHP 5.3.0» . Проверено 25 октября 2020 г.
  106. ^ «Объявление о выпуске PHP 5.4.0» . Проверено 25 октября 2020 г.
  107. ^ «Встроенный веб-сервер» . Проверено 26 марта 2012 г.
  108. ^ «Объявление о выпуске PHP 5.5.0» . Проверено 25 октября 2020 г.
  109. ^ abcd «Поддерживаемые версии». php.net . Проверено 13 декабря 2017 г.
  110. ^ «Изменения PHP 5.5.0» . php.net . Проверено 03 марта 2015 г.
  111. ^ «Объявление о выпуске PHP 5.6.0» . Проверено 25 октября 2020 г.
  112. ^ «Миграция с PHP 5.5.x на PHP 5.6.x» . php.net . Проверено 24 марта 2014 г.
  113. ^ «Сброс PHP 6» . На полках лежат книги, посвященные PHP 6, по крайней мере, с 2008 года. Но в марте 2010 года версия PHP 6 еще не вышла – на самом деле, она даже не близка к выпуску. Недавние события позволяют предположить, что PHP 6 не будет выпущен раньше 2011 года – если он вообще будет выпущен.
  114. ^ «PHP 7 движется вперед на полной скорости» . 31 октября 2014 г. Последние версии PHP были частью серии выпусков 5.x, но PHP 6 не будет. «Мы собираемся пропустить [версию] 6, потому что много лет назад у нас были планы на 6, но эти планы были очень отличается от того, что мы делаем сейчас», — сказал Гутманс. Переход сразу к версии 7 позволит избежать путаницы.
  115. ^ «Архив новостей – 2018: выпущен PHP 7.2.9» . php.net . 16 августа 2018 г. Проверено 16 августа 2018 г.
  116. ^ "PHP: rfc:size_t_and_int64_next". php.net . Проверено 16 декабря 2014 г.
  117. ^ "PHP: rfc:abstract_syntax_tree" . php.net . Проверено 16 декабря 2014 г.
  118. ^ "PHP: rfc:closure_apply". php.net . Проверено 16 декабря 2014 г.
  119. ^ "PHP: rfc:integer_semantics". php.net . Проверено 16 декабря 2014 г.
  120. ^ "PHP: rfc:isset_ternary". php.net . Проверено 16 декабря 2014 г.
  121. ^ «RFC: Синтаксис escape-кода Unicode» . 24 ноября 2014 г. Проверено 19 декабря 2014 г.
  122. ^ «Оператор комбинированного сравнения (космический корабль)» . php.net . Проверено 21 мая 2015 г.
  123. ^ «PHP RFC: Делегирование генератора» . php.net . Проверено 21 мая 2015 г.
  124. ^ «PHP RFC: анонимные классы» . php.net . Проверено 21 мая 2015 г.
  125. ^ «PHP RFC: простой CSPRNG для пользователя» . php.net . Проверено 21 мая 2015 г.
  126. ^ «PHP RFC: Декларации группового использования» . php.net . Проверено 21 мая 2015 г.
  127. ^ "PHP: rfc:iterable" . php.net . 10.06.2016 . Проверено 30 июня 2023 г.
  128. ^ "PHP: rfc:nullable_types". php.net . 10 апреля 2014 г. Проверено 30 июня 2023 г.
  129. ^ "PHP: rfc:void_return_type". php.net . 09.11.2015 . Проверено 14 ноября 2015 г.
  130. ^ "PHP: rfc:class_constant_visibility". php.net . 27.10.2015 . Проверено 8 декабря 2015 г.
  131. ^ "PHP: rfc:short_list_syntax". php.net . 07.04.2016 . Проверено 30 июня 2023 г.
  132. ^ "PHP: rfc:multiple-catch" . php.net . 06.03.2016 . Проверено 30 июня 2023 г.
  133. ^ "PHP: rfc:object-typehint" . wiki.php.net .
  134. ^ "PHP: rfc:libsodium" . wiki.php.net .
  135. ^ "PHP: rfc:allow-abstract-function-override" . wiki.php.net .
  136. ^ "PHP: rfc: параметр-без-типа-вариации" . wiki.php.net .
  137. ^ "PHP: todo:php73". wiki.php.net .
  138. ^ "PHP: rfc:flexible_heredoc_nowdoc_syntaxes" . wiki.php.net .
  139. ^ "PHP: rfc:list_reference_assignment" . wiki.php.net .
  140. ^ "PHP: rfc:pcre2-миграция" . wiki.php.net .
  141. ^ «PHP: hrtime – Руководство» . php.net .
  142. ^ «Выпущен PHP 7.4.0!». php.net . Проверено 28 ноября 2019 г.
  143. ^ "PHP: rfc:typed_properties_v2". wiki.php.net . Проверено 4 апреля 2019 г.
  144. ^ "PHP: rfc:preload" . wiki.php.net . Проверено 4 апреля 2019 г.
  145. ^ "PHP: rfc:null_coalesce_equal_operator". wiki.php.net . Проверено 4 апреля 2019 г.
  146. ^ "PHP: rfc:improve-openssl-random-pseudo-bytes" . wiki.php.net . Проверено 4 апреля 2019 г.
  147. ^ "PHP: rfc:ffi" . wiki.php.net . Проверено 5 апреля 2019 г.
  148. ^ "PHP: rfc:permanent_hash_ext". wiki.php.net . Проверено 5 апреля 2019 г.
  149. ^ "PHP: rfc:password_registry" . wiki.php.net . Проверено 5 апреля 2019 г.
  150. ^ "PHP: rfc:mb_str_split". wiki.php.net . Проверено 5 апреля 2019 г.
  151. ^ "PHP: rfc:reference_reflection". wiki.php.net . Проверено 5 апреля 2019 г.
  152. ^ "PHP: rfc:deprecate-and-remove-ext-wddx" . wiki.php.net . Проверено 5 апреля 2019 г.
  153. ^ "PHP: rfc:custom_object_serialization". wiki.php.net . Проверено 5 апреля 2019 г.
  154. ^ «PHP: Поддерживаемые версии» . php.net . Проверено 26 ноября 2023 г.
  155. ^ "PHP: rfc:negative_array_index". wiki.php.net . Проверено 5 апреля 2019 г.
  156. ^ «PHP RFC: Проверка абстрактных методов свойств» . wiki.php.net . Проверено 14 августа 2020 г.
  157. ^ «PHP RFC: более разумное сравнение строк и чисел» . wiki.php.net . Проверено 14 августа 2020 г.
  158. ^ «PHP RFC: более разумные числовые строки» . wiki.php.net . Проверено 14 августа 2020 г.
  159. ^ «PHP RFC: более строгие проверки типов для арифметических/побитовых операторов» . wiki.php.net . Проверено 14 августа 2020 г.
  160. ^ «PHP RFC: реклассификация предупреждений движка» . wiki.php.net . Проверено 14 августа 2020 г.
  161. ^ "PHP: rfc:consistent_type_errors". wiki.php.net . Проверено 5 апреля 2019 г.
  162. ^ "PHP: rfc:lsp_errors". wiki.php.net . Проверено 26 мая 2019 г.
  163. ^ «PHP RFC: независимое от локали преобразование числа с плавающей запятой в строку» . wiki.php.net . Проверено 14 августа 2020 г.
  164. ^ «PHP RFC: изменения синтаксиса переменных» . wiki.php.net . Проверено 14 августа 2020 г.
  165. ^ «PHP RFC: Атрибуты V2» . wiki.php.net . Проверено 14 августа 2020 г.
  166. ^ «PHP RFC: поправки к атрибутам» . wiki.php.net . Проверено 14 августа 2020 г.
  167. ^ «PHP RFC: более короткий синтаксис атрибутов» . wiki.php.net . Проверено 20 июня 2020 г.
  168. ^ «PHP RFC: более короткое изменение синтаксиса атрибута» . wiki.php.net . Проверено 14 августа 2020 г.
  169. ^ «PHP RFC: именованные аргументы» . wiki.php.net . Проверено 14 августа 2020 г.
  170. ^ «PHP RFC: выражение соответствия v2» . wiki.php.net . Проверено 14 августа 2020 г.
  171. ^ «PHP RFC: Продвижение свойств конструктора» . wiki.php.net . Проверено 14 августа 2020 г.
  172. ^ «PHP RFC: типы объединения 2.0» . wiki.php.net . Проверено 14 августа 2020 г.
  173. ^ «PHP RFC: смешанный тип v2» . wiki.php.net . Проверено 14 августа 2020 г.
  174. ^ «PHP RFC: статический тип возвращаемого значения» . wiki.php.net . Проверено 14 августа 2020 г.
  175. ^ «PHP RFC: уловы без захвата» . wiki.php.net . Проверено 14 августа 2020 г.
  176. ^ Андре, Тайсон. «PHP RFC: всегда доступное расширение JSON». PHP . Проверено 25 октября 2020 г.
  177. ^ "PHP: todo:php81". wiki.php.net . Проверено 16 июня 2022 г.
  178. ^ «PHP RFC: явное обозначение восьмеричного целого числа» . wiki.php.net . Проверено 25 ноября 2020 г.
  179. ^ «PHP RFC: перечисления» . wiki.php.net . Проверено 25 марта 2021 г.
  180. ^ "PHP: rfc:readonly_properties_v2". wiki.php.net . Проверено 26 ноября 2021 г.
  181. ^ "PHP: rfc:first_class_callable_syntax". wiki.php.net . Проверено 26 ноября 2021 г.
  182. ^ "PHP: rfc:new_in_initializers". wiki.php.net . Проверено 26 ноября 2021 г.
  183. ^ "PHP: rfc: чистые типы-пересечения" . wiki.php.net . Проверено 26 ноября 2021 г.
  184. ^ "PHP: rfc:noreturn_type". wiki.php.net . Проверено 26 ноября 2021 г.
  185. ^ "PHP: rfc:final_class_const". wiki.php.net . Проверено 26 ноября 2021 г.
  186. ^ "PHP: rfc:fibers" . wiki.php.net . Проверено 26 ноября 2021 г.
  187. ^ "PHP: todo:php82". wiki.php.net . Проверено 16 июня 2022 г.
  188. ^ "PHP: rfc:readonly_classes". wiki.php.net . Проверено 16 июня 2022 г.
  189. ^ "PHP: rfc:null-false-standalone-types" . wiki.php.net . Проверено 16 июня 2022 г.
  190. ^ "PHP: rfc:true-type" . wiki.php.net . Проверено 16 июня 2022 г.
  191. ^ "PHP: rfc:strtolower-ascii" . wiki.php.net . Проверено 16 июня 2022 г.
  192. ^ "PHP: rfc:dnf_types". wiki.php.net . Проверено 7 февраля 2023 г.
  193. ^ "PHP: rfc:constants_in_traits". wiki.php.net . Проверено 7 февраля 2023 г.
  194. ^ «Выпущен PHP 8.3.0!». php.net . 23 ноября 2023 г. Проверено 24 ноября 2023 г.
  195. ^ "PHP: rfc:typed_class_constants". wiki.php.net . Проверено 17 декабря 2023 г.
  196. ^ "PHP: rfc:dynamic_class_constant_fetch". wiki.php.net . Проверено 17 декабря 2023 г.
  197. ^ "PHP: rfc:marking_overriden_methods". wiki.php.net . Проверено 17 декабря 2023 г.
  198. ^ "PHP: rfc:readonly_amendments" . wiki.php.net . Проверено 17 декабря 2023 г.
  199. ^ "PHP: rfc:json_validate". wiki.php.net . Проверено 17 декабря 2023 г.
  200. ^ "PHP: rfc:randomizer_additions" . wiki.php.net . Проверено 17 декабря 2023 г.
  201. ^ "PHP: ElePHPant" . 4 октября 2014 г. Проверено 4 октября 2014 г.
  202. ^ «Перенаправление…». wwwphp-fb.github.io .
  203. ^ «Рождение талисмана PHP - создатель elePHPant Винсент Понтье раскрывает правдивую историю!» 7php.com . 06 января 2014 г.
  204. ^ "ЭлеPHPant" . PHP.земля . Проверено 13 февраля 2024 г.
  205. ^ "PHP: ElePHPant" . www.php.net .
  206. ^ «Полевой справочник по слонам». afieldguidetoelephpants.net .
  207. ^ "Теги - Руководство" . php.net . Проверено 17 февраля 2014 г.
  208. ^ ab "PHP: rfc:shorttags". php.net . 3 апреля 2008 г. Проверено 8 мая 2014 г.
  209. ^ «PHP: Основной синтаксис» . Группа PHP . Проверено 22 февраля 2008 г.
  210. ^ «Базовый стандарт кодирования». Группа совместимости PHP Framework . Проверено 03 января 2016 г.
  211. ^ "Эхо - Руководство" . php.net . Проверено 17 февраля 2014 г.
  212. ^ «Описание основных директив php.ini – Руководство» . php.net . 17 марта 2002 г. Проверено 17 февраля 2014 г.
  213. ^ «Ваша первая страница с поддержкой PHP» . Группа PHP . Проверено 25 февраля 2008 г.
  214. ^ Брей, Тим; и другие. (26 ноября 2008 г.). «Инструкция по обработке». Расширяемый язык разметки (XML) 1.0 (пятое издание) . W3C . Проверено 18 июня 2009 г.
  215. ^ «Переменные». Группа PHP . Проверено 16 марта 2008 г.
  216. ^ «Разделение инструкций». Группа PHP . Проверено 16 марта 2008 г.
  217. ^ «Комментарии». Группа PHP . Проверено 16 марта 2008 г.
  218. ^ «Целые числа в PHP, работа с ножницами и переносимость» . Блог о производительности MySQL. 27 марта 2007 года . Проверено 28 марта 2007 г.
  219. ^ abcde «Типы». Группа PHP . Проверено 16 марта 2008 г.
  220. ^ «Струны». Группа PHP . Проверено 21 марта 2008 г.
  221. ^ "SPL - StandardPHPLibrary" . PHP.net . 16 марта 2009 года . Проверено 16 марта 2009 г.
  222. ^ ab «Пользовательские функции (руководство PHP)». php.net . 04 июля 2014 г. Проверено 7 июля 2014 г.
  223. ^ ab «Функции переменных (руководство PHP)» . php.net . 04 июля 2014 г. Проверено 7 июля 2014 г.
  224. ^ «create_function() (руководство по PHP)». php.net . 06.04.2022 . Проверено 4 мая 2022 г.
  225. ^ «Анонимные функции (руководство PHP)» . php.net . 04 июля 2014 г. Проверено 7 июля 2014 г.
  226. ^ «Функции стрелок (руководство PHP)» . php.net . Проверено 25 января 2021 г.
  227. ^ Кристиан Зейлер; Дмитрий Стогов (01.07.2008). «Запрос комментариев: Лямбда-функции и замыкания». php.net . Проверено 7 июля 2014 г.
  228. ^ ab «Ссылки на объекты PHP 5». mjtsai.com . Проверено 16 марта 2008 г.
  229. ^ «Классы и объекты (PHP 5)» . Группа PHP . Проверено 16 марта 2008 г.
  230. ^ «Клонирование объектов». Группа PHP . Проверено 16 марта 2008 г.
  231. ^ «Видимость (Руководство PHP)» . theserverpages.com . 19 мая 2005 г. Архивировано из оригинала 24 сентября 2010 г. Проверено 26 августа 2010 г.
  232. ^ «Как работают компьютерные языки?». Архивировано из оригинала 16 июля 2011 г. Проверено 4 ноября 2009 г.
  233. ^ Гилмор, В. Джейсон (23 января 2006 г.). Начало PHP и MySQL 5: от новичка до профессионала. Апресс. п. 43. ИСБН 1590595521.
  234. ^ «[ГОЛОСОВАНИЕ] Интеграция Zend Optimizer+ в дистрибутив PHP» . news.php.net . Проверено 8 марта 2013 г.
  235. ^ «Альтернативный PHP-кеш». PHP.net . Архивировано из оригинала 15 ноября 2013 г. Проверено 21 сентября 2013 г.
  236. ^ «На 98,5% (и на 16%) мы — «виртуальная машина хип-хопа». hhvm.com . Декабрь 2013 . Проверено 23 февраля 2014 г.
  237. ^ «Окончательные тесты PHP 5.6, 7.0, 7.1, 7.2 и 7.3 (2019)» . 14 января 2019 г. Проверено 19 апреля 2019 г.
  238. ^ Криль, Пол (20 сентября 2017 г.). «Забудьте о PHP! Вместо этого движок HHVM Facebook переключается на Hack». Инфомир . Проверено 06 февраля 2019 г.
  239. ^ «Объявление об удалении GitHub поддержки HPHPc» . Гитхаб . Проверено 24 мая 2013 г.
  240. ^ «Лицензия PHP, версия 3.01» . Проверено 20 мая 2010 г.
  241. ^ «Несовместимые с GPL лицензии свободного программного обеспечения» . Различные лицензии и комментарии к ним . Фонд свободного программного обеспечения . Проверено 3 января 2011 г.
  242. ^ «PHP: Список функций и методов – Руководство» . Группа PHP . Проверено 14 января 2015 г.
  243. ^ «Введение – Руководство». php.net . 07.06.2013 . Проверено 13 июня 2013 г.
  244. Дэррил Паттерсон (5 августа 2004 г.). «Упростите бизнес-логику с помощью PHP DataObjects — O'Reilly Media». IBM.com . Архивировано из оригинала 16 декабря 2014 года . Проверено 16 декабря 2014 г.
  245. ^ «IBM — США» . Проверено 16 декабря 2014 г.
  246. ^ «Пять распространенных проблем с базами данных PHP» . IBM.com . 01 августа 2006 г. Проверено 13 июня 2013 г.
  247. ^ «Справочники IBM — Разработка приложений PHP для серверов данных IBM». redbooks.ibm.com . Проверено 16 декабря 2014 г.
  248. ^ "Журнал php[architect] - Журнал для PHP-программистов" . www.phparch.com .
  249. ^ Криль, Пол (19 октября 2005 г.). «PHP завоевывает популярность на предприятиях, конкурируя с Java». Инфомир . Архивировано из оригинала 13 июля 2014 года.
  250. ^ «Перекрестная ссылка: /PHP_5_4/ext/standard/». php.net . Архивировано из оригинала 16 марта 2012 года . Проверено 16 декабря 2014 г.
  251. ^ «Разработка пользовательских расширений PHP». devnewz.com . 9 сентября 2002 г. Архивировано из оригинала 18 февраля 2008 г. Проверено 25 февраля 2008 г.
  252. ^ «Почему Зефир?». zephir-lang.com . 20 октября 2015 г. Проверено 14 декабря 2015 г.
  253. ^ «Кредиты PHP» . Проверено 16 декабря 2018 г.
  254. ^ «Изучите PHP посредством обучения PHP и сертификации PHP» . www.zend.com . Проверено 16 ноября 2020 г.
  255. ^ Уокер, Джеймс (13 декабря 2021 г.). «Что новый фонд PHP означает для будущего PHP». Как компьютерщик . Проверено 26 ноября 2023 г.
  256. ^ «Новая жизнь PHP - PHP Foundation | Блог PhpStorm» . Блог JetBrains . 22 ноября 2021 г. Проверено 16 июня 2022 г.
  257. ^ ab «Общие соображения по установке». php.net . Проверено 22 сентября 2013 г.
  258. ^ «Архив новостей: выпущен PHP 5.3.3!». php.net . 22 июля 2010 г.
  259. ^ «Диспетчер процессов FastCGI (FPM)» . php.net . Проверено 22 сентября 2013 г.
  260. ^ «Использование командной строки: Введение». php.net . Проверено 22 сентября 2013 г.
  261. ^ «Использование командной строки: отличия от других SAPI». php.net . Проверено 22 сентября 2013 г.
  262. ^ ab «Общие соображения по установке». php.net . Проверено 22 сентября 2013 г.
  263. ^ «PHP: Apache 2.x в Microsoft Windows» . php.net . Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
  264. ^ «Использование командной строки: Введение». php.net . Проверено 22 сентября 2013 г.
  265. ^ «Установка PHP-GTK 2» . php.net . Проверено 22 сентября 2013 г.
  266. ^ «AWS SDK для PHP» . aws.amazon.com . Проверено 6 марта 2014 г.
  267. ^ «Windows Azure SDK для PHP — Мосты взаимодействия и лабораторный центр» . interoperabilitybridges.com . Архивировано из оригинала 20 марта 2014 г. Проверено 6 марта 2014 г.
  268. ^ «Конфигурация времени выполнения: Содержание». php.net . Проверено 22 сентября 2013 г.
  269. ^ «Директивы php.ini: Список директив php.ini» . php.net . Проверено 22 сентября 2013 г.
  270. ^ «Конфигурация времени выполнения: файл конфигурации» . PHP.net . Проверено 22 сентября 2013 г.
  271. ^ «Директивы php.ini: Список разделов php.ini». PHP.net . Проверено 22 сентября 2013 г.
  272. ^ «Конфигурация времени выполнения: где можно установить параметр конфигурации» . PHP.net . Проверено 22 сентября 2013 г.
  273. ^ «Ручная обработка изображений PHP и GD;». php.net . Проверено 9 апреля 2011 г.
  274. ^ «Язык сценариев PHP на стороне сервера» . Университет Индианы . 04 апреля 2007 г. Архивировано из оригинала 21 января 2016 г. Проверено 25 февраля 2008 г.
  275. ^ «Технология страниц JavaServer — методы сравнения страниц JavaServer для динамического контента на стороне сервера» . Сан Микросистемс . Проверено 25 февраля 2008 г.
  276. ^ «Пять простых способов настройки приложения LAMP» . ИБМ . 25 января 2011 г.
  277. ^ «Ядро PHP: структура расширения» . PHP.net . Проверено 22 сентября 2013 г.
  278. ^ «Ядро PHP: расширение «счетчик» - продолжающийся пример» . PHP.net . Проверено 22 сентября 2013 г.
  279. ^ «Написание расширений, часть I: Введение в PHP и Zend». Зенд Технологии . 01.03.2005. Архивировано из оригинала 24 сентября 2013 г. Проверено 22 сентября 2013 г.
  280. ^ «Написание расширений, часть II: Параметры, массивы и ZVAL» . Зенд Технологии . 6 июня 2005 г. Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
  281. ^ «Написание расширений, часть II: Параметры, массивы и ZVAL (продолжение)» . Зенд Технологии . 6 июня 2005 г. Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
  282. ^ «Написание расширений, часть III: Ресурсы» . Зенд Технологии . 12 мая 2006 г. Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
  283. ^ «Обертывание классов C++ в расширение PHP». Зенд Технологии . 22 апреля 2009 г. Архивировано из оригинала 20 сентября 2013 г. Проверено 22 сентября 2013 г.
  284. ^ «Расширение PHP с помощью C++?». Переполнение стека . Проверено 22 сентября 2013 г.
  285. ^ «Как я могу использовать код C++ для взаимодействия с PHP?». Переполнение стека . Проверено 22 сентября 2013 г.
  286. ^ Големон, Сара (2006). Расширение и встраивание PHP . Сэмс. ISBN 978-0-672-32704-9.
  287. ^ «Запрос № 46919: Многопоточность» . PHP.net . Проверено 22 сентября 2013 г.
  288. ^ «pthreads: Введение (Руководство PHP)» . PHP.net . Проверено 22 сентября 2013 г.
  289. ^ «PECL :: Пакет :: pthreads» . pecl.php.net . Проверено 9 февраля 2014 г.
  290. ^ «Статистика использования и рыночная доля PHP версии 4 для веб-сайтов, февраль 2024 г.» . w3techs.com .
  291. ^ ab «Статистика использования и рыночная доля PHP версии 5 для веб-сайтов, февраль 2024 г.» . w3techs.com .
  292. ^ «Статистика использования и рыночная доля PHP версии 7 для веб-сайтов, февраль 2024 г.» . w3techs.com .
  293. ^ «Статистика использования и рыночная доля PHP версии 8 для веб-сайтов, февраль 2024 г.» . w3techs.com .
  294. ^ "Руководство: Требования к установке#PHP" . МедиаВики. 25 января 2010 г. Проверено 26 февраля 2010 г. PHP — это язык программирования, на котором написан MediaWiki [...]
  295. ^ «О WordPress» . Проверено 26 февраля 2010 г. WordPress был [...] построен на PHP
  296. ^ Кемпкенс, Алекс. «Joomla! — система управления контентом для создания веб-сайтов и приложений».
  297. ^ «PHP и Друпал». Друпал.орг. 16 сентября 2007 года . Проверено 13 июня 2010 г.
  298. ^ «О» . Мудл.орг . Проверено 20 декабря 2009 г.
  299. ^ «Требования к серверу SilverStripe». Архивировано из оригинала 28 ноября 2014 года . Проверено 13 октября 2014 г. SilverStripe требует PHP 5.3.2+.
  300. ^ Иде, Энди (31 января 2013 г.). «PHP просто растет и растет» . Проверено 1 апреля 2013 г.
  301. ^ «Национальная база данных уязвимостей (NVD) Статистика поиска уязвимостей» . Проверено 22 ноября 2019 г.
  302. ^ "PHP: rfc:taint" . wiki.php.net .
  303. ^ «Заметки о встрече разработчиков, ноябрь 2005 г.».
  304. ^ «Решение о режиме заражения, ноябрь 2007 г.» . Архивировано из оригинала 26 февраля 2009 г.
  305. ^ "Проект Hardened-PHP" . 15 августа 2008 г. Архивировано из оригинала 24 февраля 2019 г. Проверено 22 августа 2019 г.
  306. ^ «Безопасность: использование глобальных переменных регистрации» . Руководство по PHP . PHP.net . Проверено 22 сентября 2013 г.
  307. ^ «Волшебные цитаты». Руководство по PHP . PHP.net . Проверено 17 января 2014 г.
  308. ^ «Директива конфигурации 'движка'» . PHP: Конфигурация времени выполнения . PHP.net . Проверено 13 февраля 2014 г.
  309. ^ «Эксплойт безопасности PHP с изображениями GIF» . 22 июня 2007 г. Архивировано из оригинала 27 сентября 2013 г. Проверено 22 сентября 2013 г.
  310. ^ «Эксплойт безопасности PHP с изображениями GIF» . Блог классов PHP. 20 июня 2007 г. Проверено 22 сентября 2013 г.
  311. ^ «Передача вредоносного PHP через getimagesize()» . 04.06.2007. Архивировано из оригинала 21 сентября 2013 г. Проверено 22 сентября 2013 г.
  312. ^ «Директива конфигурации 'enable_dl'» . PHP: Конфигурация времени выполнения . PHP.net . Проверено 13 февраля 2014 г.
  313. ^ «Ссылка на функцию PHP: dl()» . PHP.net . Проверено 22 сентября 2013 г.
  314. ^ «Мой хост не исправит свой троян» . Разговор о веб-хостинге . Проверено 22 сентября 2013 г.
  315. ^ Raz0r (25 января 2013 г.). «Форум Simple Machines <= 2.0.3 Сброс пароля администратора» .{{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  316. ^ Безопасность Ниббла. «TYPO3-SA-2010-020, TYPO3-SA-2010-022 ОБЪЯСНЕНИЕ».
  317. ^ «Криптостойкость и небезопасное сравнение». Ахак.ру (на русском языке).
  318. ^ «Операторы сравнения». PHP.net.
  319. ^ Кравчик, Павел (2013). «Наиболее распространенные атаки на веб-приложения». IPSec.pl. Архивировано из оригинала 15 апреля 2015 г. Проверено 15 апреля 2015 г.
  320. ^ Кравчик, Павел (2013). «Итак, каковы «самые критичные» недостатки приложений? В новом топ-10 OWASP». IPSec.pl . Проверено 15 апреля 2015 г.
  321. ^ «Статистика использования и рыночная доля PHP для веб-сайтов, февраль 2024 г.» . w3techs.com . Проверено 23 февраля 2024 г.
  322. ^ «PHP: Random_int — Руководство» .
  323. ^ "PHP: Рэнд - Руководство" .
  324. ^ «PHP: Mt_rand — Руководство» .
  325. ^ «Я забыл ваш пароль: случайные атаки на PHP-приложения» . www.readkong.com .

дальнейшее чтение

Послушайте эту статью ( 35 минут )
Разговорная иконка Википедии
Этот аудиофайл был создан на основе редакции этой статьи от 23 ноября 2011 года и не отражает последующие изменения. ( 23 ноября 2011 г. )

Внешние ссылки