Сравнительный анализ языков PHP и Python
Самой главной особенностью языка PHP является его гибкость, это больше язык шаблонов, чем язык команд, он являясь императивным языком ближе к декларативным языкам, чем любой другой императивный язык. У него динамическая не строгая типизация, которая с выходом последних версий уже может быть строгой, конечно при большом количестве проверок в рантайме это будет замедлять работу программы, но в целом язык создан не для этого. Большинство интернет магазинов, сайтов услуг и т. д. написаны именно на нем, той скорости с которой сейчас работает чистый php код особенно с использованием Opcache более чем достаточно. Обычное время запроса к dns серверу от 0.2 до 0.5 секунд в среднем, при больших запросах к базе данных еще добавляем 0.2 секунды, сам же php код, при правильной организации архитектуры, а это роутинг, подключение основного класса и вызов метода для вывода данных на представление, отрабатывает менее 0.2 секунды. Этого более чем достаточно для работы обычных интернет магазинов и небольших ERP систем. Дополнительно для ускорения работы с данными сейчас можно использовать горизонтальный шардинг, например как партицирование в PgSQL через ORM, работа с графами также может вестись через orm запросы на обработку перед выводом данных.
Python хоть и является интерпретируемым, в отличии от PHP имеет строгую типизацию. И если бы типизация у Python была бы статическая, тогда было бы понятно, что логика работы такого машинного кода предусматривает абсолютную проверку на типы данных, которые явно заданы всегда, то есть не будет условия отсутствия заданного типа, в противном случае это сильно усложняет поддержку кода.
Python использует динамические ограничения видимости. То есть для оценки выражения компилятор сначала ищет текущий блок, а затем последовательно все вызывающие функции. То есть область видимости переменной может выходить за рамки определенного блока.
Проблема такого подхода в том, что каждое выражение должно быть протестировано в каждом возможном контексте. Это является одной из причин его медленной работы. Именно поэтому современные языки программирования используют в основном статическую область видимости.
Несмотря на всю гибкость, использование лямбд в Python ограничено. Они могут быть только выражениями (expressions), но не инструкциями (statements). С другой стороны, объявления переменных и statements и есть инструкции. Проще говоря, добавление statements сделает лямбду многострочной, а синтаксис Python не позволяет так сделать.
Это различие между expressions и statements довольно произвольно, и не встречается в других языках.
Питон хорошо подходит начинающим разработчикам — там используются пробелы и отступы для обозначения разных уровней кода. Это делает его визуально привлекательным и интуитивно понятным.
В PHP больше полагаются на фигурные скобки и точки с запятой. И пусть это не так визуально комфортно для новичков, но на большом проекте такой подход очень помогает в понимании частей кода.
Для языка PHP уже создано очень много шаблонизаторов типа Smarty, Blade, Mustache, Twig, Volt и т.д., и в принципе сам php код без шаблонизатора очень легко встраивается в html код, и можно не ограничивать себя в отступах, писать так лаконично, насколько необходимо в соответствии с dom моделью, в отличии от Python, в котором отступ это часть языка конструкции синтаксического дерева, да и шаблонизаторов на Python не так уж и много, основной Jinja встроенный по умолчанию в Flask.
За 15 лет работы мне часто приходилось использовать Python для различного рода задач, для подключения поиска ElasticSearch, использования синтаксического анализа на NLTK и т.д., но это прикладные задачи, также как и парсинг сайтов на node.js, но когда необходимо распарсить большие многомерные массивы, работать с каскадными интерфейсами объектов, таких как xml, json, для создания сложных динамических областей и т.д., намного проще и быстрее использовать именно PHP. И сложность именно в том, что часто в веб разработке такие многомерные массивы данных имеют различную структуру и типизацию элементов, работать с которой стандартно нельзя из-за строгой типизации языка Python, в PHP эту роль берет на себя сам интерпретатор кода, программисту достаточно только выполнить проверку выходных данных. Такую способность языку PHP дает большое количество встроенных методов и сложный анализ синтаксического дерева.
С таким подходом скорость языка Python все равно не дотягивает до компилируемых языков, а писать большое приложение на нем очень сложно, намного проще использовать микросервисную архитектуру, при этом конечно же необходимо использовать оркестрацию, а также учитывать, что каждый из микросервисов работает со своим количеством библиотек, которые нужно автоматически обновлять и поддерживать, а также модулей самого языка.
Получается, что язык подходит больше как компаньон в использовании каких-то сложных задач именно для веб сервисов. Таких языков множество, например GraphQL или TypeScript — это языки компаньоны, которые отлично справляются со своей задачей.
Из плюсов языка конечно же можно назвать простой синтаксис, хотя и на PHP ребенок сможет писать, но за последнее время появилось множество по настоящему современных языков программирования, в которых не нужно следить за выделением и очень редко за утечкой памяти.
За последние годы вышли такие всем известные языки как Go, LESS, Scala, Kotlin, Swift и даже такой как WebAssembly, и конечно же все зависит от целей, которые преследует разработчик или его работодатель.
Многие говорят, что Python отлично подходит для разработки мобильных приложений, но писать десктопное или андроид приложение на интерпретируемом языке — это как писать сайты на c++, конечно можно, но зачем компилировать все приложение ради того, чтобы подвинуть кнопку на 2px вправо?
Для разработки андроид приложений есть новые хорошо зарекомендовавшие себя компилируемые языки, например Kotlin, помимо того, что это язык написанный в России у него еще куча преимуществ. Очень много различных способов работы с данными, именно благодаря этому он так хорошо компилируется в Js, он поддерживает как статическую так и динамическую типизацию. При этом правилом хорошего тона является все таки использование статической типизации так как она здесь строгая.
Очень простое и продуманное ООП, очень многие функции написаны специально так, чтобы разработчик переключаясь с другого языка не начинал изучать все с нуля. Лишний сахар убрали. При этом скобки оставили, но при этом используются стрелочные функции, упрощенный синтаксис проверок и ветвлений, возможность переопределения переменных и методов, все это в совокупности с большим количеством методов и компилируемостью дает огромные возможности для разработки мобильных приложений. И именно этот язык Google официально использует как основной для написания мобильных приложений.
Python был разработан в начале 90-го года, и изначально представлял собой язык немного расширяющий возможности таких языков как Lisp, на текущее время на Python разработали кучу библиотек таких как NumPy, SciPy, Pandas и т.д., но при подключении всех библиотек и использовании полного функционального аналога PHP программа будет работать не быстрее, а иногда и медленнее. И это никак не делает его универсальным, это язык для математического анализа данных, причем именно для анализа, потому что саму обработку и вывод иногда проще реализовать на другом языке.
Python или PHP: Что выбрать для проекта?
Выбирая стек технологий для своего проекта, вы вероятно столкнетесь с множеством вопросов и сложностей. Давайте разберем подробнее сходства и отличия этих языков и поможем определиться с выбором.
Python — это динамически типизированный интерпретируемый язык высокого уровня. Он характеризуется читабельностью и краткостью кода. Он был создан в 90-х годах прошлого века Гвидо ван Россумом. Название происходит от названия комедийного сериала на BBC под названием «Monty Python’s Flying Circus».
PHP — это язык сценариев, который в основном используется для создания веб-проектов (интернет-магазины, корпоративные сайты и порталы). PHP был создан в 1994 году Расмусом Лердорфом, и первоначально он назывался PHP / FI, или Personal Home Page / Forms Interpreter.
Прежде чем вы поймете самые большие различия этих двух гигантов, стоит ознакомиться с их главными сходствами.
Начнём с того, что PHP и Python являются языками с открытым исходным кодом. Это означает, что вам не нужно будет приобретать лицензию. Кроме того, разработчики смогут самостоятельно изменять и/или расширять существующий функционал.
Оба языка «дружелюбны» к новичкам, это означает, что на рынке существует огромное количество курсов, а также большое сообщество программистов, готовых ответить на многие вопросы. При этом оба языка являются языками высокого уровня, синтаксис которых приближен к человеческому языку. Они читабельны и более лояльны к возможным ошибкам.
Так же многие начинающие, да и опытные программисты используют документацию. В зависимости от состояния документации и ее ведения, а также постоянного обновления, делается заключение о марке того или иного языка программирования. В случае с PHP и Python здесь нет никаких проблем, документация находится на высоком уровне.
Несмотря на множество факторов, связывающих эти два языка программирования, существует довольно много различий, о которых мы расскажем ниже!
Синтаксис Python более читабельный, элегантный и создавать на нем веб-продукты приятно, хотя местами код слишком педантичен).
Трудно найти более интуитивный, понятный и многофункциональный фреймворк, чем Django. Конечно, существуют и другие Python-фреймворки (Flask, FastAPI и т.д.), но Django на данный момент является самым популярным и проверенным в бою.
PHP так же имеет свои фреймворки, такие, как Laravel, Symfony или даже CodeIgniter.
Django имеет множество встроенных инструментов, а его скорость немного опережает фреймворки PHP. Здесь трудно назвать победителя, потому что фреймворк выбирается в зависимости от потребностей проекта.
В этом вопросе Python и PHP идут плечом к плечу. PHP имеет мощный отладчик под названием XDebug, а Python — отладчик под названием PDB (Python Debugger). Здесь будет трудно найти язык программирования-победителя.
PHP был создан с целью создания сайтов и веб-порталов. Что касается создания решений в области Machine Learning, обработки изображений, API и т.д. Python здесь абсолютно незаменим.
Подавляющее большинство инструментов для создания веб-проектов является бесплатным. Однако бывают ситуации, когда за то или иное решение приходится платить. Что касается языков, которые опять же являются бесплатными и с открытым исходным кодом, то в этой категории будет сложно найти победителя. Скорее, победа будет зависеть от специфики вашей отрасли и функционала продукта.
Более 80 процентов современных веб-сайтов были созданы на основе PHP. Эта статистика немного изменилась за прошедшие годы, потому-что появился новый Python с арсеналом своих фреймворков. Конечно, эта пропорция не перевернется за короткий промежуток времени, но с течением времени, все возможно. Python начнет играть все более важную роль благодаря большей безопасности и гибкости своих решений.
Рейтинг популярности TIOBE на декабрь 2021 год:
1 место: Python
12 место: PHP