Comments 55
— Стандартная библиотека размазана между сотней функций в глобальном пространстве имен.
— Маленькая стандартная библиотека. Нет встроенной поддержки многопоточности.
— До сих пор (2019 год) нет короткого синтаксиса для лямбд, поэтому foreach удобней чем array_map.
— Нет набора коллекций. Вместо List, Set, Map — массив.
— Для подключения расширений, например, для работы с kafka нужно что-то компилировать. А потом еще делать пакет и ставить на сервер.
— Медленный. Относительно C/C++ и Java.
Пусть это будет здесь.
Многопоточность? Ещё демонизацию вспомните, PHP немного не для этих целей. Асинхронность тоже из коробки вам никто не предоставляет, но есть решения типа того же reactphp.
А что в вашем понимании короткий синтаксис для лямбд?
А чем отличаются по вашему List, Set, Map от массива?
Для работы с кафкой есть пакеты в композере. Там много для чего есть пакеты.
Медленный да, но он же не компилируемый а интерпретируемый.
Пакет для работы с кафкой из композера требует установленного расширения.
Нет набора коллекций. Вместо List, Set, Map — массив.
Их не будет до тех пор, пока нет дженериков. Можно, конечно, заморочиться и поверх массива реализовать подобные структуры, но без дженериков всё равно ими будет не так удобно пользоваться, как в Java.
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
Java Elapsed 0.039
Ну почти.
А теперь предлагаю включить JIT и проверить ещё раз уже с ним =)
Ну а по пунктам из списка выше… Можно подставить любой другой язык вместо PHP и ничего не поменяется. Python, Javascript, к примеру, из скриптовых.
Извините :)
Всем добра
продукты не заканчиваются вэбом
С другой стороны: у многих продукт это именно веб-приложение.
Действительно, PHP подходит для реализации систем со сложной бизнес логикой, где поддерживаемость кода в будущем имеет приоритет на скоростью работы приложения. Но в то же время не могу не отметить, что в большинстве таких случаев, сегодня использование PHP имеет скорее исторические корни: уже много написали, дорого переписывать и плюсы переписывания не очевидны.
Никто и не предлагает использовать PHP где-то, кроме веб-разработки.
Смотря что считать "веб-разработкой". Консольные команды — это веб-разработка или нет? Или зависит от того, например, кто ещё лезет в базу и прочие инфраструктурные сервисы, куда лезет эта команда? И считается ли веб-разработкой только полноценные html-сайты или все API over HTTP тоже веб-разработка?
Простой, большой, хорошая, много, большое, простая, простая, большой...Большинство (8 из 13) аргументов автора содержит принципиальную ошибку оценки, при которой относительное подается как абсолютное, оторвано от контекста и потому не может быть подтверждено сравнениями. Проще, лучше или больше — по сравнению с чем?
Дает выбор подхода, регулярные выражения, работа с изображениями, работа с вебом, бесплатность...Прочие (5 из 13) аргументы не содержат что-то уникальное, присущее одному лишь 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
не угодил?но к этой мелочи так привыкаешь и часто используешь
Что потом просто руки хочется оторвать тем, кто не понимает разницу между быстрым прототипом и проектом, который планируется поддерживать и развивать десятки лет, и сует этот ассоциативный массив везде, превращая код в помойку.
что не так с mysqli?
Язык любимый — PHP.
Двулик, как гордый аксакал,
И это то что я искал!
В Друпале код из процедур
Понятен даже и для дур!
Я в ожиданьи 8 с jit,
Он будет мегасуперхит,
Но это не точно…
Извините, вырвалось )
Но сказать за что может нравится язык, не скажу, так как в первую очередь нравится именно процесс создания логики, программного обеспечения и получения обратной связи от тех кто использует это ПО. И если ПО оказалось полезным и нужным, вот это кайф :)
Статья не стоит потраченного на нее времени
Если этот тот самый Хаям, что занимается архивами "Мастака", то просто респект.
И после тамошних баталий-споров хабровская критика тогда вообще как комариный укус))
заходи к нам в чат на телеграмм t.me/delphimaster_chat
За что я люблю PHP.
Во первых я его не люблю. Я на нём пишу.
Чем он хорош? Хорош обилием готовых решений и готовыми ответами на любые вопросы.
Чем ещё хорош? Хорош тем что можно писать хоть что и хоть как.
Хочу пишу спагетти код, хочу блюду SOLID и проверку типов.
Можно накидать прототип, отработать идею, всё выкинуть и после этого написать с ноля и написать хорошо. И всё это на одном языке.
PHP даёт свободу творчества. И эта свобода как и любая другая накладывает ответственность.
Нет плохих инструментов, есть неподходящие. PHP это только инструмент, а ответственность на том кто этим инструментом работает.
Почему мне нравится PHP?