Pull to refresh

Comments 55

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

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

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

Как вообще в голову может прийти мысль сравнивать скорость C++ и PHP? А чо не с ассемблером сразу?
Вы когда выбираете инструментарий не берете во внимание производительность?
Производительность — лишь один из факторов, который отнюдь не во всяких задачах является решающим.

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

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

Берём по принципу "достаточно или нет для наших задач". В теории при прочих равных возьмём то, что быстрее, но на практике прочих равных не бывает.

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


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

Тут никаких возражений. Это единственный минус 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 Просадки могут возникнуть только на блокирующих функциях нетворка.

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

Если быть точным, то array в php и есть map «An array in PHP is actually an ordered map.»
Спасибо за подробный ответ, но с двумя пунктами до сих пор не согласен.

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)
С Си сравнивать не стал — действительно глупо.

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

На локалке
~/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
PHP Elapsed 0.133 (без XDebug)
Java Elapsed 0.039

Ну почти.

А теперь предлагаю включить JIT и проверить ещё раз уже с ним =)

Как его включить на 7.2 без пересборки? Без пересборки потому что не хочется собирать deb пакеты.
Никак, JIT можно подключить только в 7.4, ну либо ждать PHP 8
Я к тому, что у вас в php 7.2 подозрительно долго, xdebug может включен?
Со включенным Xdebug было более 1 секунды. Не знал что он так сильно влияет на производительность.
PHP 5.6.38:
~/# php b.php
PHP Elapsed 2.547
~/# mv /etc/php.d/15-xdebug.ini /etc/php.d/15-xdebug.i
~/# php b.php
PHP Elapsed 0.647
Разница почти в 4 раза.
Когда давно я писал немного на PHP и, знаете, мне больше по духу вот эта статья.
Ну а по пунктам из списка выше… Можно подставить любой другой язык вместо PHP и ничего не поменяется. Python, Javascript, к примеру, из скриптовых.
Та статья устарела. Стандартная библиотека всё так же с проблемами, но зато появились PSR. Основная беда всё так же — в людях, которые пишут на PHP: львиная доля продолжает «тяп-ляп и в прод».
Почему мне нравится PHP? Стокгольмский синдром!

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

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

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


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

Никто и не предлагает использовать PHP где-то, кроме веб-разработки.

Смотря что считать "веб-разработкой". Консольные команды — это веб-разработка или нет? Или зависит от того, например, кто ещё лезет в базу и прочие инфраструктурные сервисы, куда лезет эта команда? И считается ли веб-разработкой только полноценные html-сайты или все API over HTTP тоже веб-разработка?

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

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

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

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

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

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

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

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

Есть же mysqli, зачем PDO? :)

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

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


Извините, вырвалось )
Мне говорили, что главный плюс PHP — если я сегодня начну его изучать, то через пару месяцев уже без проблем найду работу. Не знаю, не проверял, так ли это.
Можно заменить РНР на любой другой язык и добавить: «Мне нравится этот язык, потому что он позволяет быстро и эффективно решать мой круг задач, а другие языки я даже не смотрел, потому что я старый и ленивый».
Есть неплохая англоязычная статья где сравнивают популярный в США Java и менее популярный PHP с точки зрения бизнеса. Из всей стати, главная любовь к PHP в том что с минимум затрат на разработчиков и минимум времени на разработку, можно запустить проект и начать извлекать прибыль.

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

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


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

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

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

За что я люблю PHP.
Во первых я его не люблю. Я на нём пишу.
Чем он хорош? Хорош обилием готовых решений и готовыми ответами на любые вопросы.
Чем ещё хорош? Хорош тем что можно писать хоть что и хоть как.
Хочу пишу спагетти код, хочу блюду SOLID и проверку типов.
Можно накидать прототип, отработать идею, всё выкинуть и после этого написать с ноля и написать хорошо. И всё это на одном языке.
PHP даёт свободу творчества. И эта свобода как и любая другая накладывает ответственность.
Нет плохих инструментов, есть неподходящие. PHP это только инструмент, а ответственность на том кто этим инструментом работает.

Sign up to leave a comment.

Articles