Стоит ли изучать PHP в 2023-2024 годах?

RedDeveloper
20.08.2023 18:21
Стоит ли изучать PHP в 2023-2024 годах?

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Давайте начнем эту историю с МОЕЙ истории.

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

Все начинают утверждать, что PHP правит интернетом благодаря таким CMS, как Wordpress, Drupal и им подобным, но у меня немного другая точка зрения.

В этой статье я хочу рассказать вам о видении разработчика, который зарабатывает деньги на PHP уже более 12 лет.

PHP небезопасен

Первая болевая точка связана с проблемами безопасности PHP.

Многие считают, что это худший выбор, когда речь идет о безопасности, поскольку в нем много ошибок, уязвимостей нулевого дня и других проблем. Это не совсем так.

Я предлагаю вам посмотреть архивы CVE всех современных языков, таких как Java, Python, и сравнить их с архивами PHP.

Проблемы безопасности / производительности PHP с 2013 года
Проблемы безопасности / производительности PHP с 2013 года

Если посмотреть на этот график, то кажется, что в период с 2013 по 2023 год для языка PHP было обнаружено большое количество уязвимостей, верно?

Теперь посмотрим, например, на уязвимости Java, обнаруженные за тот же период времени.

Проблемы безопасности / производительности JRE с 2013 года
Проблемы безопасности / производительности JRE с 2013 года

В данном случае Java имеет гораздо больше уязвимостей, чем PHP за тот же период времени, но это красивая метрика, позволяющая утверждать, что Java менее безопасна, чем PHP? Конечно, нет. Это означает лишь то, что в каждом языке есть ошибки, проблемы, уязвимости и другие вещи, которые сообщества (и компании) решают каждый день.

Сам Php сильно эволюционировал с версии 5.x до версии 8.x (об этом мы расскажем ниже), другая сторона медали - относительная, на триноме PHP = Wordpress = плохой, устаревший, небезопасный код.

Wordpress, как и другие CMS, имеет полностью открытый исходный код, что означает, что множество людей, как опытных, так и не очень, могут создавать для него модули и плагины (установленные на большом количестве сайтов в Интернете). Проблемы безопасности и плохие практики в 90% случаев связаны с тем, кто пишет код, а не с самим языком. Если программист без опыта работы вызывает смертельную ошибку в плагине Wordpress, возможно, он не настолько хорош (и должен быть не настолько хорош с другими языками).

Еще один момент, связанный с WP, заключается в том, что многие веб-мастера не обновляют PHP внутри сайтов, что приводит к проблемам с безопасностью:

Установленные версии PHP Wordpress https://www.kinsta.com
Установленные версии PHP Wordpress https://www.kinsta.com

Разница между PHP (интерпретируемым) и компилируемым языками заключается в том, что в случае возникновения проблемы компилируемый язык кричит на вас во время компиляции, не давая вам выпустить потенциальные проблемы, а PHP кричит на вас во время выполнения, делая ошибку более опасной и менее предсказуемой.

В любом случае, если тот, кто пишет код, является хорошим разработчиком, многих проблем можно легко избежать. Такие практики, как TDD, хороший анализ новых реализаций, много ноу-хау в проекте и тому подобные вещи могут быть очень полезны.

И последнее, но не менее важное: PHP - это не только "Wordpress", множество компаний по всему миру используют его для создания крупных программных продуктов и сайтов различного назначения (например, Wikipedia, Tumblr или Slack). Современные фреймворки, такие как Symfony и Laravel, позволяют нам создавать очень надежные приложения с меньшими усилиями и проблемами, а также имеют огромное сообщество вокруг себя.

Слабая и динамическая типизация Php

Еще одной больной точкой при обсуждении PHP является отсутствие статической типизации. В настоящее время это неверно.

PHP теперь позволяет разработчикам статически типизировать переменные, атрибуты и ответы. Это означает, что если вы этого не делаете, то вина лежит на вас, но язык позволяет это делать.

PHP теперь поддерживает 90% лучших парадигм ООП, интерфейсы и пространства имен, множественную типизацию, типизацию intersect и т.д. (то, что многие любят, например, в TS).

В версиях 7.x / 8.x язык получил множество улучшений, он растет как солидный, современный и мощный язык.

/** Send message method
     * @param int|string $chatId chatId for answer
     * @param string $text message text
     * @param int|null $messageThreadId thread (topic) id for supergroups with topics
     * @param array|null $replyMarkup additional markup to be sended (array to json format)
     * @param int $replyToMessageId reply to specified message id
     * @param string $parseMode parse mode for the message text, default "markdown"
     * @param array|null $entities special entities to be included in the message (array to json format)
     * @param bool $disablePagePreview disable links preview for this message
     * @param bool $disableNotification disable notifications for this message
     * @param bool $protectContent prevent content to be forwarded
     * @return \stdClass
     * ref : https://core.telegram.org/bots/api#sendmessage
     */
    protected function sendMessage(int|string $chatId,
                                   string $text,
                                   int|null $messageThreadId = 0,
                                   array|null $replyMarkup = [],
                                   int  $replyToMessageId = 0,
                                   string $parseMode="",
                                   array|null $entities = [],
                                   bool $disablePagePreview = true,
                                   bool $disableNotification = false,
                                   bool $protectContent = false
                                    ) : \stdClass{

        $arrParams = [
            "chat_id" => $chatId,
            "text" => $text,
            "disable_web_page_preview" => $disablePagePreview,
            "disable_notification" => $disableNotification,
            "protect_content" => $protectContent,
            "reply_to_message_id" => $replyToMessageId,
            "parse_mode" => $parseMode
        ];

        if (!empty($messageThreadId) && $messageThreadId && !is_null($messageThreadId)){
            $arrParams["message_thread_id"] = $messageThreadId;
        }

        if (!empty($replyMarkup)){
            $arrParams["reply_markup"] = json_encode($replyMarkup);
        }
        if (!empty($entities)){
            $arrParams["entities"] = json_encode($entities);
        }

        $callResult = $this->callApi(__FUNCTION__, $arrParams);

        return $callResult;

    }

PHP медленный

Давайте поговорим о производительности. Когда люди говорят, что PHP медленный, они, возможно, имеют в виду самые старые версии. PHP 8.x, фактически самая быстрая версия, - это совсем другая история.

Давайте посмотрим на сравнение производительности сейчас и в прошлом.

Сравнение производительности PHP в 2023 году https://onlinephp.io
Сравнение производительности PHP в 2023 году https://onlinephp.io

В актуальных версиях PHP глобальная производительность выросла в 15 раз по сравнению с версиями 4.x и в 4 раза по сравнению с версией 5.6.

Это улучшение связано с внедрением компилятора JIT (Just in time), который переводит код в байткод во время выполнения, что ускоряет его исполнение, а также с другими дополнениями и улучшенной кодовой базой.

Таким образом, в 2023-2024 годах PHP для веб-разработки будет обладать большим потенциалом.

При использовании такой связки, как Laravel + OpenSwoole + Octane, производительность возрастает еще больше.

Почему же многие компании отказываются от PHP?

PHP, как и любой другой язык, имеет свои ограничения.

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

Но в 90% случаев она может быть использована, когда речь идет о сайтах или управляющих программах, где требуется надежная БЭ без взаимодействия в реальном времени и стандартная персистентность (как у SQL-баз данных).

Возможно, это одна из причин, остальные - резонансный факт.

Вспомним другие современные апикальные языки, такие как Java или Javascript.

Java - дева Oracle, Javascript должен поблагодарить React (Facebook) и Angular (Google) за огромный рост в последние годы. У PHP тоже есть сообщество (только с открытым исходным кодом), но до появления PHP Foundation многие участники покидали его, из-за чего PHP развивался меньше, чем другие языки.

Сегодня PHP Foundation собрал 580.000$ только в 2022 году за счет пожертвований компаний и частных лиц, что позволило возобновить развертывание языка. За несколько месяцев появилось много новых возможностей, так что я с оптимизмом смотрю в будущее.

Так стоит ли изучать PHP в 2023-2024 годах?

Я думаю, что история PHP будет продолжаться еще много лет. Сегодня на нем работает множество сайтов, за которыми стоит огромный рынок. Это значит, что опытный PHP-разработчик может реально заработать много денег и быть востребованным в компаниях различных отраслей.

Если вам это нравится, изучайте, не пожалеете.

Если вы боитесь за будущее, изучайте другие вещи, но помните, что для разработчика языки - это только инструменты и не более. Если PHP умрет в один день, мы сменим язык и будем жить дальше.

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

Вы можете найти мои социальные сети и другие классные вещи здесь.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.

Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами

05.08.2023 16:43

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