Когда-то давно я впервые познакомился с программированием на qbasic у друга за компьютером (своего тогда не было). Это было замечательно проведенное время, когда наша с другом совместная программа выводила на графический экран слово «ПЭВМ» с разными закорючками, определенные эллипсами, прямыми и прочими примитивами. После вывода нашего творчества на матричный принтер, мы были в полном экстазе.

Спустя какое-то время на смену qbasic'у пришло изучение turbo pascal'я в 10-11 классе. Я был просто без ума от простоты и выразительности этого языка, но спустя несколько месяцев немного поостыл к нему, видя очевидные его недостатки. Это было время, когда Интернет только начинал шагать по просторам Земли.

image

Тогда я и затесался в небольшой закуток одного известного книжного магазина, где облазил буквально каждую полку в поисках Знания. Изучил буквально все имеющиеся книги по известным языкам программирования. Здесь то меня однажды и нашло сокровище в виде книги по PHP 4 — справочника по языку с практическими примерами. Когда взял эту книгу в руки — у меня что-то щелкнуло в голове — и я знал что это то, что я и искал. Достаточно быстро освоил основы, писал свои мини-скрипты и сайты. К тому времени, когда вышел PHP 5 с полной поддержкой ООП, я особенно сильно привязался к процедурному подходу php и был рад что новая версия не настаивает на обязательном использовании объектно-ориентированного подхода.

Со временем стали появляться множество книг по различным CMS, написанными на php: Joomla, WordPress… Я изучил несколько из них, некоторые поверхностно (сколько хватило времени), но особенно я задержался на такой CMS, как Drupal. Эта CMS просто шедевр процедурного подхода (по крайне мере прошлые версии — насчет современных не знаю), если вы хотите разобраться как все работает — то Drupal для вас (есть хорошие книги, в том числе на русском).

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

За что же мне нравится PHP?

  • простота
  • за предоставление выбора процедурного/объектно-ориентированного или гибридного подхода к программированию
  • большой выбор вспомогательных функций (на все случаи жизни)
  • хорошая документация на нескольких языках — в том числе на русском
  • в доках много комментариев с практическими примерами
  • большое интернет-сообщество (всегда есть у кого спросить, если что-то непонятно)
  • регулярные выражения (наше все)
  • простая работа с MySQL
  • простая работа с различными протоколами и любым текстовым представлением данных
  • GD для работы с изображениями
  • ориентация на web (это и так понятно) — куки, сессии, формы...
  • большой выбор CMS (причем, много форумных движков)
  • все бесплатно и доступно

Конечно же, php не является языком «для всего на свете», но в той или иной мере способен решить практически любую задачу. На нем не пишут нейронные сети и всякие ИИ, но, я думаю, есть гики, которые способны и не на такое.

Пишите в комментариях за что Вам еще нравится PHP! Особые люди могут указать чем им не угодил PHP и мы попытаемся это исправить, освятив своей верой в php :)

PS. Конечно же, ждём PHP 8 и jit — тут, говорят, нехилая финтифлюшка намечается, хотя как отразится (и отразится ли вообще?) на обычных пользователях, пока не совсем ясно, обещают супер-оптимизацию на быстродействие и память, но как будет на деле — это еще проверять и проверять… после того, как выйдет релиз.

Комментарии (44)


  1. BasicWolf
    25.10.2019 08:25
    -1


  1. Coocos
    25.10.2019 08:33
    -3

    Лучше бы написали статью «За что мне не нравится PHP». По мне это:
    — Стандартная библиотека размазана между сотней функций в глобальном пространстве имен.
    — Маленькая стандартная библиотека. Нет встроенной поддержки многопоточности.
    — До сих пор (2019 год) нет короткого синтаксиса для лямбд, поэтому foreach удобней чем array_map.
    — Нет набора коллекций. Вместо List, Set, Map — массив.
    — Для подключения расширений, например, для работы с kafka нужно что-то компилировать. А потом еще делать пакет и ставить на сервер.
    — Медленный. Относительно C/C++ и Java.

    Пусть это будет здесь.


    1. lleo_aha
      25.10.2019 08:48
      +1

      Лучше бы ничего этого вообще не было здесь, включая «статью»


    1. zzzmmtt
      25.10.2019 09:49

      Стандартная библиотека достаточна. Больше всего там многих раздражают различный порядок аргументов у некоторых функций, правда если смотреть «под капот», понятно, почему так сделано.
      Многопоточность? Ещё демонизацию вспомните, PHP немного не для этих целей. Асинхронность тоже из коробки вам никто не предоставляет, но есть решения типа того же reactphp.
      А что в вашем понимании короткий синтаксис для лямбд?
      А чем отличаются по вашему List, Set, Map от массива?
      Для работы с кафкой есть пакеты в композере. Там много для чего есть пакеты.
      Медленный да, но он же не компилируемый а интерпретируемый.


      1. Coocos
        25.10.2019 10:10

        Многие компании обрабатывают данные на PHP. Имею ввиду фоновую или пакетную обработку.
        Пакет для работы с кафкой из композера требует установленного расширения.


        1. zzzmmtt
          25.10.2019 13:49

          Например тут я никаких зависимостей от расширений php не вижу.


    1. franzose
      26.10.2019 14:02

      Нет набора коллекций. Вместо List, Set, Map — массив.

      Их не будет до тех пор, пока нет дженериков. Можно, конечно, заморочиться и поверх массива реализовать подобные структуры, но без дженериков всё равно ими будет не так удобно пользоваться, как в Java.


    1. zhulan0v
      26.10.2019 18:38
      +1

      Как вообще в голову может прийти мысль сравнивать скорость C++ и PHP? А чо не с ассемблером сразу?


      1. Coocos
        27.10.2019 00:20

        Вы когда выбираете инструментарий не берете во внимание производительность?


        1. dolovar
          27.10.2019 11:32

          Производительность — лишь один из факторов, который отнюдь не во всяких задачах является решающим.


        1. franzose
          27.10.2019 13:22
          +1

          C++ и PHP абсолютно разные задачи решают. Не понимаю, зачем их вообще сравнивать.


          1. Coocos
            27.10.2019 15:22
            -2

            Одинаковые тоже решают. Пакетная обработка данных, например.


            1. zzzmmtt
              28.10.2019 08:35

              Вы не забывайте, что кроме производительности инструменты (языка в данном случае), для бизнеса важна ещё и стоимость поддержки. PHP будет выгоднее чем C++. Ну и не забываем кроссплатформенность, PHP заводится на большинстве популярных ОС при этом имея минимум ограничений (что-то на винде будет работать не так, как на линукс/юникс системах), в то время как для компиляции плюсов есть нюансы под каждую платформу, о которых нужно помнить, компиляторов опять же не один, стандартов тоже не один.


              1. Coocos
                28.10.2019 11:25

                Я в курсе. Перечитайте мои комментарии еще раз. Там написано «только»?


    1. SerafimArts
      29.10.2019 07:37
      +1

      Давайте я постараюсь детально расписать где именно вы ошибаетесь и высказать уже своё "имхо":


      Стандартная библиотека размазана между сотней функций в глобальном пространстве имен.

      Тут никаких возражений. Это единственный минус PHP на данный момент, по-моему.


      Маленькая стандартная библиотека.

      Вполне сравнима с .NET и Java. А если из них вырезать функционал рисования всяких окошек и другие desktop-специфичные, то на порядки больше.


      Нет встроенной поддержки многопоточности.

      Она не нужна. А когда нужна: pecl install swoole или pecl install pthread


      До сих пор (2019 год) нет короткого синтаксиса для лямбд, поэтому foreach удобней чем array_map.

      Вообще-то есть. И foreach работает с итераторами, а array_map с массивами. Плюс foreach — это конструкция языка, а не функция, что делает её быстрее. В остальных случаях не вижу проблем написать и array_map:


      array_map(fn (int $i): int => $i + 10, [1, 2, 3]);

      Нет набора коллекций. Вместо List, Set, Map — массив.

      Есть в SPL.


      Для подключения расширений, например, для работы с kafka нужно что-то компилировать. А потом еще делать пакет и ставить на сервер.

      Внезапно! Но можно и не компилить и воспользоваться FFI, например как в этом случае с TensorFlow: https://github.com/dstogov/php-tensorflow


      Медленный. Относительно C/C++ и Java.

      На CPU-bound вполне сопоставимый с C: https://gist.github.com/dstogov/12323ad13d3240aee8f1 Просадки могут возникнуть только на блокирующих функциях нетворка.


      1. zzzmmtt
        29.10.2019 08:36

        Нет набора коллекций. Вместо List, Set, Map — массив.

        Если быть точным, то array в php и есть map «An array in PHP is actually an ordered map.»


      1. Coocos
        29.10.2019 09:41

        Спасибо за подробный ответ, но с двумя пунктами до сих пор не согласен.

        array_map(fn (int $i): int => $i + 10, [1, 2, 3]);

        PHP Arrow function syntax is available in PHP 7.4 only
        Соответственно в продакшене еще нет.
        На CPU-bound вполне сопоставимый с C: gist.github.com/dstogov/12323ad13d3240aee8f1 Просадки могут возникнуть только на блокирующих функциях нетворка.

        PHP 7.2 — 1,196s (новее у меня нет)
        Java 1.8u201 — 0,118s (с учетом запуска JVM)
        Java 13-ea+33 — 0,0 39s (с учетом запуска JVM)
        С Си сравнивать не стал — действительно глупо.


        1. SerafimArts
          29.10.2019 09:44

          Это не отменяет того, что релиз PHP 7.4 в 2019ом году. А если не хочется обновляться, то есть preprocess.io, который заведёт тот же самый синтаксис хоть на PHP 5.


        1. zzzmmtt
          29.10.2019 15:40

          На локалке
          ~/test$ php -v
          PHP 7.0.33-0ubuntu0.16.04.7 (cli) ( NTS )
          ~/test$ php b.php
          PHP Elapsed 0.131

          На одном из серваков
          ~/$ php -v
          PHP 5.6.40 (cli)
          ~/$ php b.php
          PHP Elapsed 0.388

          Ещё на одном серваке с включенным xdebug
          ~/$ php -v
          PHP 5.6.38
          with Xdebug v2.5.5
          ~/$ php b.php
          PHP Elapsed 2.564

          Ещё один сервак с древней пыхой:
          ~/$ php -v
          PHP 5.6.19
          ~/$ php b.php
          PHP Elapsed 0.522


          1. Coocos
            29.10.2019 16:06

            PHP Elapsed 0.133 (без XDebug)
            Java Elapsed 0.039

            Ну почти.


  1. ZaEzzz
    25.10.2019 08:35
    +2

    Когда давно я писал немного на PHP и, знаете, мне больше по духу вот эта статья.
    Ну а по пунктам из списка выше… Можно подставить любой другой язык вместо PHP и ничего не поменяется. Python, Javascript, к примеру, из скриптовых.


    1. porn
      25.10.2019 21:35

      Та статья устарела. Стандартная библиотека всё так же с проблемами, но зато появились PSR. Основная беда всё так же — в людях, которые пишут на PHP: львиная доля продолжает «тяп-ляп и в прод».


  1. germn
    25.10.2019 08:48

    Почему мне нравится PHP? Стокгольмский синдром!

    Извините :)


  1. GennPen
    25.10.2019 08:51

    Я конечно извиняюсь, но автор не пробовал спустя столько лет смотреть в сторону других языков? Или тут признаки синдрома утенка?


  1. RedComrade
    25.10.2019 08:55
    +2

    PHP позволяет быстро, на приемлемом уровне, решать бизнес задачи — по этой причине он подходит мне, и поверьте, это популярное мнение у многих крупных продуктовых ИТ компаний
    Всем добра


    1. fougasse
      25.10.2019 09:21
      +1

      продукты не заканчиваются вэбом


      1. ewolf
        25.10.2019 09:46

        С другой стороны: у многих продукт это именно веб-приложение.


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


  1. OTCloud
    25.10.2019 09:30

    Господа, вы просто не поняли автора. Это был панчлайн, чтобы подогреть ваши 5-е точки.


  1. dolovar
    25.10.2019 09:48

    Простой, большой, хорошая, много, большое, простая, простая, большой...
    Большинство (8 из 13) аргументов автора содержит принципиальную ошибку оценки, при которой относительное подается как абсолютное, оторвано от контекста и потому не может быть подтверждено сравнениями. Проще, лучше или больше — по сравнению с чем?
    Дает выбор подхода, регулярные выражения, работа с изображениями, работа с вебом, бесплатность...
    Прочие (5 из 13) аргументы не содержат что-то уникальное, присущее одному лишь PHP. Более того, затруднительно найти язык программирования среди популярных, который не обладает всеми перечисленными свойствами. Автор, присоединяюсь к совету, прозвучавшему выше в комментариях, ознакомиться с другими языками.


    1. VolCh
      25.10.2019 23:02

      А если ознакомился, но везде чего-то не хватает или чего-то слишком много? Вот только за последние 4 месяца на текущем проекте писал на Java, Go, JS, TS и bash. Но вот как-то полностью уходить с PHP желания нет. Хотя и не хватает некоторых вещей.


  1. hd_keeper
    25.10.2019 11:00

    Не убедил.


  1. 1Tiger1
    25.10.2019 12:05

    Больше похоже на провокацию холивара.
    Или на статью из 2003-2008 года.
    Ну и уж простите, список странный для человека который застал еще php4 в расцвете сил. Больше похоже на список джуна который только познакомился с языком и сделал пару простых сайтов на какой-то cms. Без обид, это не понты с моей стороны или попытки принизить вас, это анализ по акцентам в списке, я вижу восприятие языка на уровне «допиливание джумлы/друпала». Про фреймворки вообще ни слова, про слабую типизацию тоже (что и плюс и минус), про преимущества и недостатки системы независимых процессов которые быстро рождаются и умирают в противовес постоянно работающим общей программе других языков (та же Java или C#), в конце концов ООП вообще пропустили. Процедурный подход, серьезно? Может вы еще лапшу делаете, смешиваете логику и представление и с mysql через mysqli работаете (не в курсе жив он или нет, но мало ли)? Хотя последнее не такой уж и грех местами.

    «регулярные выражения (наше все)» — если у разработчика есть проблема и он решает ее регуляркой — теперь у него две проблемы.

    За что я люблю PHP:
    За ассоциативные массивы и слабую типизацию, серьезно. В строго типизированных языках, в том же C# некоторые тривиальные задачи вроде сложить вот этот набор данных в временную структурку чтобы ее передать превращается в серьезную возню с структурами/классами/объектами а в php всегде есть ассоциативный массив. Да мелочь, но к этой мелочи так привыкаешь и часто используешь, что когда начинаешь делать что-то на другом языке ее больше всего не хватает. Недавно нужно было пострадать серилизацией/десерелизацией в json в C#, и там ад. То что я могу в php сделать 1 строчкой (буквально) свернув в json ассоциативный массив, или развернув его в массив или stdObject, а могу через обьекты большим количеством кода, а могу поставить либы и описывать в yml или аннотациях в обьектах или в json, если надо с валидацией или без, то с C# только хардкор, только полное обьектное описание всех структур данных и местами еще пришлось адаптировать json потому что некоторые структуры поддерживались уж совсем извращенно. И пришлось писать кучу моделей специально для сериализации/десериализации, ни для чего другого они мне были не нужны, уже была нормальная система моделей данных, но они само собой не подходили по структуре.

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


    1. Free_ze
      25.10.2019 12:25

      с C# только хардкор, только полное обьектное описание всех структур данных

      Чем dynamic не угодил?


    1. skyeff
      25.10.2019 14:21
      +1

      но к этой мелочи так привыкаешь и часто используешь

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


    1. Fafhrd
      25.10.2019 22:46
      -1

      что не так с mysqli?


      1. zzzmmtt
        28.10.2019 08:40

        Есть же PDO, зачем нужен чистый mysqli? Ну и кроме mysql есть же ещё и postgresql, ms sql server, oracle, etc. Да и на чистом PDO в большинстве проектов писать смысла нет, описал модели в какой-либо ORM и вперёд, к чистому sql скорее всего не понадобится обращаться.


        1. Fafhrd
          28.10.2019 18:02

          Вопрос не в «зачем», вопрос в «что не так», с учетом его наличия в mysqlnd.


  1. ThunderCat
    25.10.2019 12:17

    Я не умею в ООП,
    Язык любимый — PHP.
    Двулик, как гордый аксакал,
    И это то что я искал!

    В Друпале код из процедур
    Понятен даже и для дур!
    Я в ожиданьи 8 с jit,
    Он будет мегасуперхит,
    Но это не точно…


    Извините, вырвалось )


  1. A114n
    25.10.2019 14:15

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


  1. lovermann
    25.10.2019 15:10

    Можно заменить РНР на любой другой язык и добавить: «Мне нравится этот язык, потому что он позволяет быстро и эффективно решать мой круг задач, а другие языки я даже не смотрел, потому что я старый и ленивый».


  1. northmule
    25.10.2019 16:10

    Есть неплохая англоязычная статья где сравнивают популярный в США Java и менее популярный PHP с точки зрения бизнеса. Из всей стати, главная любовь к PHP в том что с минимум затрат на разработчиков и минимум времени на разработку, можно запустить проект и начать извлекать прибыль.

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


  1. index0h
    25.10.2019 19:27

    Статья не стоит потраченного на нее времени


    Заголовок спойлера


  1. AndrewTishkin
    26.10.2019 02:30

    Если этот тот самый Хаям, что занимается архивами "Мастака", то просто респект.


    И после тамошних баталий-споров хабровская критика тогда вообще как комариный укус))


    1. xayam Автор
      26.10.2019 03:03

      тот самый, тебя точно не помню, но вроде на форуме твоя фамилия была

      заходи к нам в чат на телеграмм t.me/delphimaster_chat