Язык программирования PHP: от истоков до современности
Ему ежегодно пророчили исчезновение из-за невостребованности. Но спустя годы он по-прежнему остаётся в топе языков для веб-разработки.
 
 
PHP — интерпретируемый скриптовый язык программирования общего назначения. Название представляет собой рекурсивный акроним PHP: Hypertext Preprocessor (PHP: предварительный обработчик гипертекста), но изначально оно расшифровывалось как Personal Home Page Tools (Инструменты для создания персональных веб-страниц).
За более чем 20 лет PHP прошёл путь от простого набора скриптов до полноценного языка веб-программирования и стабильно входит в топ-10 популярных языков по версии TIOBE.
PHP: что это за язык программирования и почему он так популярен
PHP создали специально для разработки веб-страниц. На нём можно делать ресурсы любой сложности: от простого лендинга до социальной сети — именно на PHP написана «ВКонтакте». Код на PHP легко встраивается в классический HTML — нужно всего лишь добавить соответствующий тег. Язык поддерживают все популярные операционные системы: Windows, macOS, Linux, UNIX и не только.
А ещё PHP позволяет работать с такими веб-серверами, как IIS в Windows и Apache в macOS и Linux. Благодаря такой широкой совместимости у разработчиков практически нет ограничений в выборе веб-сервера и операционной системы.
Читайте также:
Отцом самого популярного языка веб-программирования считается датский программист Расмус Лердорф. В 1994 году он создал набор скриптов на языке Perl — ту самую «персональную домашнюю страницу», которая легла в основу PHP.
Со временем к работе над языком подключились программисты со всего мира. PHP — один из старейших языков, который разрабатывается силами сообщества по модели open source. Сейчас его поддерживает и разрабатывает группа энтузиастов во главе с компанией Zend Technologies. Компанией руководят Зеев Сураски и Энди Гутманс, в 1997 году выпустившие третью версию PHP.
Познакомимся с основными особенностями языка.
Первое свойство языка PHP: интерпретируемость
В отличие от Java, код на котором компилируется, а затем запускается в работу, PHP-код создаётся во время обращения к PHP. Человек открывает сайт, на сервер посылается запрос, и в это время компилируется код. Каждый скрипт компилируется в реальном времени, а затем выполняется.
Приведём пример кода:
<?php 
/** 
 * Класс для сохранения файлов, кроме изображений 
 */ 
 
class Application { 
  protected $_image = null; // Файл, с которым нужно работать 
  
 /** 
  * Метод сохраняет файл на диск 
  * 
  * [id153965260|@param] string $path — новый путь к файлу 
  * [id153965260|@param] string $imagePath — старый путь
  * [id16226053|@return] boolean 
  */ 
  public function saveFile($imagePath, $path){ 
 
    $result = file_get_contents($imagePath, $path); 
   
    $nameDir = explode('/',$path); 
   
    $newNameDir= 'files/'.$nameDir[1].'/'.$nameDir[2].'/'.$nameDir[3]; 
    mkdir($newNameDir, 0777, true); 
 
    $resultWrite = file_put_contents($path, $result);  
  
    return $resultWrite; 
  } 
}Благодаря этому свойству PHP — очень гибкий язык. Например, Java-программист вводит название класса один раз — теперь оно неизменно. PHP же компилируется в рантайме, и можно подставить любое название класса из переменной.
Что такое рантайм?
Время жизни программ, написанных на языках вроде C, C++ и Java, можно представить в виде двух последовательных этапов: compile time (компиляция) и runtime (выполнение). Сначала все инструкции на языке переводятся в единицы и нули — это двоичный код, с которым умеет работать компьютер. Затем компьютер выполняет каждую команду — это и есть рантайм. В C, C++ и Rust этапы компиляции и выполнения явно разделены, поэтому их называют компилируемыми языками.
А вот в PHP и JavaScript эти процессы совмещены: как только инструкцию перевели в машинный код, она сразу же выполняется — отдельного этапа компиляции всего кода нет. Такие языки называют интерпретируемыми.
Однако ради гибкости разработчики жертвуют скоростью работы сайта. В случае с Java программу собирают один раз, а затем запускают. В случае с PHP приходится тратить время пользователя на процесс компиляции кода.
Второе свойство языка PHP: слабая динамическая типизация
В языках программирования тип — это набор значений, которые может иметь переменная, и операций, которые с этими значениями можно осуществлять.
В разных языках программирования типы ведут себя по-разному. Поэтому выделяют несколько видов типизации:
- по времени определения типа — статическая и динамическая типизация;
- по постоянству множества значений — слабая и сильная типизация.
В языках со статической типизацией тип переменной определяется на этапе компиляции и не может изменяться в течение работы программы. Программист явно указывает тип переменных с помощью служебных слов: если это число, пишет int, если строка — string.
В языках с динамической типизацией переменная за время работы программы может быть числом, строкой, массивом, объектом — чем угодно. Интерпретатор не будет «ругаться» и сам определит тип обрабатываемых данных по контексту (например, по виду операции).
С одной стороны, динамическая типизация позволяет разработчику не заботиться о соблюдении типов, а с другой — приводит к труднораспознаваемым логическим ошибкам. Кроме того, из-за динамической типизации программы работают медленнее и потребляют больше оперативной памяти.
Сравнение версий языка программирования PHP: от первой до седьмой
Версии с первой по третью были сырыми и обладали минимальным набором возможностей, хотя для создания простых сайтов их хватало. Разработчики сетовали на то, что нелогичность расположения параметров в функциях стандартной библиотеки усложняет работу.
Но с версии 5.4 PHP превратился в отлаженную технологию, а релизы 5.5 и 5.6 закрепили успех языка. Все версии отлично себя показали и оказались хорошо защищены от SQL-инъекций и взлома. Шестую версию пропустили: она должна была поддерживать Unicode на уровне ядра, но релиз не состоялся.
 
					
«PHP 6 был амбициозным, но отстойным. Вот почему мы занялись PHP 7, в процессе пропустив шестую версию».
 Вильсон Дюка,
						 веб-разработчик.
					
Седьмая версия считается революционной в плане скорости. Версия 5.6 медленно работала с массивами и вообще с переменными: обработка статически нетипизированных данных занимала много времени. Строка обрабатывалась в 60 раз медленнее, чем на C#. Это не бросается в глаза — речь о долях секунды. Но когда у тебя миллиард пользователей, как у «Фейсбука»*, скорость критична.
HipHop и прорыв в скорости
«Фейсбук»* написан на PHP — и с ростом количества пользователей это стало настоящей проблемой. Чтобы её решить, программисты создали для пятой версии собственный интерпретатор языка. Они изначально компилировали его в промежуточный код, а затем отправляли в обычный интерпретатор Zend Engine. Программисты «Фейсбука»* ввели статическую типизацию и ускорили работу языка в два раза. Это стало настоящим прорывом. Транслятор назвали HHVM, или HPHP Compiler — «HipHop для языка PHP».
Но команда разработки PHP плотно занялась массивами. Итогом стала седьмая версия, которая работала быстрее HHVM. При этом статической типизации в седьмой версии по-прежнему почти нет. Её можно найти только в параметрах функции — но этого так мало, что можно считать, будто её нет совсем.
Каждая новая версия языка, начиная с 7.0, работает быстрее предыдущей — разница видна по замерам:
 
			PHP 8: что нового
PHP постоянно развивается, поэтому мы обновили статью 2 ноября 2022 года.
В 2020 году вышла версия PHP 8, и веб-разработчики встретили её тепло. В PHP 8 внедрили JIT-компиляцию: по данным сообщества, она ускоряет работу веб-приложений в три раза. Появились именованные параметры и лаконичный оператор выбора match, пришедший на замену switch. А ещё заметно повысилась безопасность: например, добавили оператор nullsafe, который прекращает работу цепочки методов, если один из них вернул null.
Читайте также:
Затем, в 2021 году, вышло обновление 8.1. Одной из главных фич релиза стал долгожданный тип enum — раньше в качестве замены перечислениям разработчики создавали классы с набором констант. Добавили readonly-свойства, которые работают как get-методы, но выглядят лаконичнее. С полным списком нововведений можно ознакомиться на официальном сайте PHP.
Релиз PHP 8.2 запланирован на 24 ноября 2022 года. В обновление планируют добавить readonly-классы, улучшенный генератор псевдослучайных чисел и множество других небольших фич, которые позволят писать более безопасный и лаконичный код. Тестовая версия уже доступна для скачивания.
Для чего используют PHP
Единственная сфера применения — веб-разработка. На PHP невозможно сделать десктопные приложения, он не используется в мобильной разработке — только веб. Но сегодня эта область огромна. Даже некоторые десктопные приложения уходят в веб — тот же Microsoft Office имеет облачный сервис. Ранее считалось, что PHP не подходит для больших высоконагруженных проектов, но опыт «Фейсбука»* доказывает обратное. «Авито» — ещё один пример удачной реализации.
Подробнее о практическом применении языка программирования читайте в нашей статье «Для чего используют PHP и почему его ненавидят».
С чего начать изучение
PHP легко изучить самостоятельно — у него низкий порог входа. Буквально за вечер можно прочитать документацию и написать скрипт, который будет возвращать данные на сайт. Другие языки (C#, Java) имеют более высокий порог вхождения, и одного дня, чтобы создать работающий код, мало. Сегодня на российском рынке труда из-за низкого порога входа много PHP-кодеров, и большинство — невысокого уровня.
 
			Скриншот: TIOBE
Хороший разработчик PHP фактически применяет те же паттерны программирования, что и в статически типизированных языках. На PHP даже сложнее программировать, и вот почему. Если в Java или C# допустить алгоритмическую ошибку — например, присвоить переменной не тот тип, — они «дадут по рукам». PHP же это пропустит, и программист сломает голову: что не так? Ведь всё работает, но неправильно. Из-за этого на современном рынке хорошим PHP-программистам готовы платить не меньше, чем другим разработчикам. Но хорошего специалиста сложно найти.
Чтобы учить язык, нужно задать себе вопрос: «Для чего он мне?» Учить ради процесса учёбы бесполезно, без практического применения знания забудутся. Нужно поставить конкретную задачу и искать решение.
* Решением суда запрещена «деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook и Instagram на территории Российской Федерации по основаниям осуществления экстремистской деятельности».
 Все
                                Все
                             Истории
                                        Истории Дизайн
                                    Дизайн Код
                                    Код Геймдев
                                    Геймдев Бизнес
                                    Бизнес Маркетинг
                                    Маркетинг Управление
                                    Управление Кино
                                    Кино Музыка
                                    Музыка Проектная фотография
                                    Проектная фотография Развитие
                                    Развитие Здоровье
                                    Здоровье Деньги
                                    Деньги Образование
                                    Образование EdTech
                                    EdTech Корп. обучение
                                    Корп. обучение Блог Skillbox
                                    Блог Skillbox Глоссарий
                                        Глоссарий Спецпроекты
                                        Спецпроекты Профориентация
                                        Профориентация 
                                     
                     
                     
                                     
                                     
                                     
                                    