Спустя какое-то время на смену qbasic'у пришло изучение turbo pascal'я в 10-11 классе. Я был просто без ума от простоты и выразительности этого языка, но спустя несколько месяцев немного поостыл к нему, видя очевидные его недостатки. Это было время, когда Интернет только начинал шагать по просторам Земли.
Тогда я и затесался в небольшой закуток одного известного книжного магазина, где облазил буквально каждую полку в поисках Знания. Изучил буквально все имеющиеся книги по известным языкам программирования. Здесь то меня однажды и нашло сокровище в виде книги по 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)
Coocos
25.10.2019 08:33-3Лучше бы написали статью «За что мне не нравится PHP». По мне это:
— Стандартная библиотека размазана между сотней функций в глобальном пространстве имен.
— Маленькая стандартная библиотека. Нет встроенной поддержки многопоточности.
— До сих пор (2019 год) нет короткого синтаксиса для лямбд, поэтому foreach удобней чем array_map.
— Нет набора коллекций. Вместо List, Set, Map — массив.
— Для подключения расширений, например, для работы с kafka нужно что-то компилировать. А потом еще делать пакет и ставить на сервер.
— Медленный. Относительно C/C++ и Java.
Пусть это будет здесь.zzzmmtt
25.10.2019 09:49Стандартная библиотека достаточна. Больше всего там многих раздражают различный порядок аргументов у некоторых функций, правда если смотреть «под капот», понятно, почему так сделано.
Многопоточность? Ещё демонизацию вспомните, PHP немного не для этих целей. Асинхронность тоже из коробки вам никто не предоставляет, но есть решения типа того же reactphp.
А что в вашем понимании короткий синтаксис для лямбд?
А чем отличаются по вашему List, Set, Map от массива?
Для работы с кафкой есть пакеты в композере. Там много для чего есть пакеты.
Медленный да, но он же не компилируемый а интерпретируемый.
franzose
26.10.2019 14:02Нет набора коллекций. Вместо List, Set, Map — массив.
Их не будет до тех пор, пока нет дженериков. Можно, конечно, заморочиться и поверх массива реализовать подобные структуры, но без дженериков всё равно ими будет не так удобно пользоваться, как в Java.
zhulan0v
26.10.2019 18:38+1Как вообще в голову может прийти мысль сравнивать скорость C++ и PHP? А чо не с ассемблером сразу?
Coocos
27.10.2019 00:20Вы когда выбираете инструментарий не берете во внимание производительность?
dolovar
27.10.2019 11:32Производительность — лишь один из факторов, который отнюдь не во всяких задачах является решающим.
franzose
27.10.2019 13:22+1C++ и PHP абсолютно разные задачи решают. Не понимаю, зачем их вообще сравнивать.
Coocos
27.10.2019 15:22-2Одинаковые тоже решают. Пакетная обработка данных, например.
zzzmmtt
28.10.2019 08:35Вы не забывайте, что кроме производительности инструменты (языка в данном случае), для бизнеса важна ещё и стоимость поддержки. PHP будет выгоднее чем C++. Ну и не забываем кроссплатформенность, PHP заводится на большинстве популярных ОС при этом имея минимум ограничений (что-то на винде будет работать не так, как на линукс/юникс системах), в то время как для компиляции плюсов есть нюансы под каждую платформу, о которых нужно помнить, компиляторов опять же не один, стандартов тоже не один.
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 Просадки могут возникнуть только на блокирующих функциях нетворка.
zzzmmtt
29.10.2019 08:36Нет набора коллекций. Вместо List, Set, Map — массив.
Если быть точным, то array в php и есть map «An array in PHP is actually an ordered map.»
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)
С Си сравнивать не стал — действительно глупо.
SerafimArts
29.10.2019 09:44Это не отменяет того, что релиз PHP 7.4 в 2019ом году. А если не хочется обновляться, то есть preprocess.io, который заведёт тот же самый синтаксис хоть на PHP 5.
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
ZaEzzz
25.10.2019 08:35+2Когда давно я писал немного на PHP и, знаете, мне больше по духу вот эта статья.
Ну а по пунктам из списка выше… Можно подставить любой другой язык вместо PHP и ничего не поменяется. Python, Javascript, к примеру, из скриптовых.porn
25.10.2019 21:35Та статья устарела. Стандартная библиотека всё так же с проблемами, но зато появились PSR. Основная беда всё так же — в людях, которые пишут на PHP: львиная доля продолжает «тяп-ляп и в прод».
GennPen
25.10.2019 08:51Я конечно извиняюсь, но автор не пробовал спустя столько лет смотреть в сторону других языков? Или тут признаки синдрома утенка?
RedComrade
25.10.2019 08:55+2PHP позволяет быстро, на приемлемом уровне, решать бизнес задачи — по этой причине он подходит мне, и поверьте, это популярное мнение у многих крупных продуктовых ИТ компаний
Всем добраfougasse
25.10.2019 09:21+1продукты не заканчиваются вэбом
ewolf
25.10.2019 09:46С другой стороны: у многих продукт это именно веб-приложение.
Действительно, PHP подходит для реализации систем со сложной бизнес логикой, где поддерживаемость кода в будущем имеет приоритет на скоростью работы приложения. Но в то же время не могу не отметить, что в большинстве таких случаев, сегодня использование PHP имеет скорее исторические корни: уже много написали, дорого переписывать и плюсы переписывания не очевидны.
OTCloud
25.10.2019 09:30Господа, вы просто не поняли автора. Это был панчлайн, чтобы подогреть ваши 5-е точки.
dolovar
25.10.2019 09:48Простой, большой, хорошая, много, большое, простая, простая, большой...
Большинство (8 из 13) аргументов автора содержит принципиальную ошибку оценки, при которой относительное подается как абсолютное, оторвано от контекста и потому не может быть подтверждено сравнениями. Проще, лучше или больше — по сравнению с чем?
Дает выбор подхода, регулярные выражения, работа с изображениями, работа с вебом, бесплатность...
Прочие (5 из 13) аргументы не содержат что-то уникальное, присущее одному лишь PHP. Более того, затруднительно найти язык программирования среди популярных, который не обладает всеми перечисленными свойствами. Автор, присоединяюсь к совету, прозвучавшему выше в комментариях, ознакомиться с другими языками.VolCh
25.10.2019 23:02А если ознакомился, но везде чего-то не хватает или чего-то слишком много? Вот только за последние 4 месяца на текущем проекте писал на Java, Go, JS, TS и bash. Но вот как-то полностью уходить с PHP желания нет. Хотя и не хватает некоторых вещей.
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 конечно такой проблемы нет, там свои проблемы.Free_ze
25.10.2019 12:25с C# только хардкор, только полное обьектное описание всех структур данных
Чемdynamic
не угодил?
skyeff
25.10.2019 14:21+1но к этой мелочи так привыкаешь и часто используешь
Что потом просто руки хочется оторвать тем, кто не понимает разницу между быстрым прототипом и проектом, который планируется поддерживать и развивать десятки лет, и сует этот ассоциативный массив везде, превращая код в помойку.
Fafhrd
25.10.2019 22:46-1что не так с mysqli?
zzzmmtt
28.10.2019 08:40Есть же PDO, зачем нужен чистый mysqli? Ну и кроме mysql есть же ещё и postgresql, ms sql server, oracle, etc. Да и на чистом PDO в большинстве проектов писать смысла нет, описал модели в какой-либо ORM и вперёд, к чистому sql скорее всего не понадобится обращаться.
ThunderCat
25.10.2019 12:17Я не умею в ООП,
Язык любимый — PHP.
Двулик, как гордый аксакал,
И это то что я искал!
В Друпале код из процедур
Понятен даже и для дур!
Я в ожиданьи 8 с jit,
Он будет мегасуперхит,
Но это не точно…
Извините, вырвалось )
A114n
25.10.2019 14:15Мне говорили, что главный плюс PHP — если я сегодня начну его изучать, то через пару месяцев уже без проблем найду работу. Не знаю, не проверял, так ли это.
lovermann
25.10.2019 15:10Можно заменить РНР на любой другой язык и добавить: «Мне нравится этот язык, потому что он позволяет быстро и эффективно решать мой круг задач, а другие языки я даже не смотрел, потому что я старый и ленивый».
northmule
25.10.2019 16:10Есть неплохая англоязычная статья где сравнивают популярный в США Java и менее популярный PHP с точки зрения бизнеса. Из всей стати, главная любовь к PHP в том что с минимум затрат на разработчиков и минимум времени на разработку, можно запустить проект и начать извлекать прибыль.
Но сказать за что может нравится язык, не скажу, так как в первую очередь нравится именно процесс создания логики, программного обеспечения и получения обратной связи от тех кто использует это ПО. И если ПО оказалось полезным и нужным, вот это кайф :)
BasicWolf