Подтвердить что ты не робот

Нет PHP для больших проектов? Почему нет?

Я прочитал несколько сообщений, где люди заявляли (не предлагали, не обсуждали, не предлагали), что PHP не должен использоваться для больших проектов.

Будучи главным разработчиком PHP, я задаю два вопроса:

  • Что определяет "большой проект"?
  • Почему бы и нет? Каковы подводные камни использования PHP

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

Мысли?

4b9b3361

Ответ 1

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

PHP оказался очень масштабируемым: Wikipedia - один из крупнейших и самых популярных сайтов в Интернете, и он запускает PHP. Достаточно сказано?

Существует множество инструментов/библиотек, которые дают вам основу для работы, что делает менее вероятным, что кто-то напишет плохой, менее ремонтируемый код: см. CakePHP, Symfony, PDO, Smarty и т.д. и т.д. и т.д.

Он получил плохой рэп, потому что это язык, который имеет очень низкие барьеры для входа: он бесплатный, вы можете получить очень дешевый PHP-хостинг, документация лучшая есть, есть много обучающих программ в Интернете, плюс это делает многое очень просто (например: откройте URL-адрес и получите содержимое файла: file('http://www.google.com');). Это означает, что много новичков подняли его и сделали с ним очень изворотливые сайты, но это произойдет с любым языком, который вы выберете в качестве первого.

Работа с твердой структурой ORM (около 30 вопросов по SO, о которых лучше всего), и это будет относиться к вам хорошо.

Ответ 2

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

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

и

вы можете написать плохой код на любом языке

PHP очень часто может позволить себе запутаться в библиотеках кодов спагетти и сделать ваше "приложение" действительно просто серией сценариев (см. Moodle для хорошего примера...)

Я думаю, что многие из "Не использовать PHP для больших вещей" исходят из того, что PHP взломан с оригинальной цели: язык шаблонов. Что я могу понять, но есть много проектов, которые доказывают, что вы можете это сделать (Drupal, mediawiki, Facebook).

Ответ 3

Нет причин, по которым вы не можете использовать PHP для больших проектов. В конце концов, Facebook построен на PHP. Однако будут проблемы, но есть проблемы с любым крупным проектом.

Что делает PHP настолько распространенным, это низкий барьер для входа и дешевого хостинга. Он работает как расширение Apache, и вы можете просто начать кодирование. Если вы перейдете на другие корпоративные платформы, такие как .Net или Java, у них есть гораздо более высокий барьер для входа, но у них также есть много инфраструктуры, которая поможет вам создавать приложения, масштабируемые.

Например, абстракция базы данных в PHP является (imho) горькой. Это конкретный поставщик. С MySQL люди склонны делать такие вещи, как:

function get_users($surname) {
  mysql_query("select * from users where surname = '$surname'");
  ...
}

что плохо по нескольким причинам:

  • Он плохо использует кеш запросов;
  • Он не обрабатывает экранирование символов (что, конечно же, можно сделать с помощью mysql_escape_string(), но вы будете удивлены, как часто люди этого не делают); и
  • Это довольно легко кодировать таким образом, чтобы допускать атаки SQL-инъекций.

Лично я предпочитаю mysqli по всем вышеперечисленным причинам, но у него есть свои проблемы: а именно, что использование полей LONGTEXT разбивает mysql и выполняется с по крайней мере с 2005 года, при этом все еще нет исправления (да, я и некоторые другие подняли ошибку).

Сравните это с Java (с которым я более знаком), а JPA или Ibatis - это значительно лучшие решения ORM с более высокими затратами на запуск, но они помогут вам в масштабах предприятия.

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

При этом PHP + memcached/APC + beanstalkd проходит долгий путь.

О, что другая проблема: PHP не поддерживает фоновую обработку или потоковую обработку. Для этого вам нужно что-то еще (или автономные скрипты). Если вы используете что-то еще, почему бы и не использовать это для веб-материалов (например, Java, Ruby,.Net и т.д.)?

Ответ 4

Поскольку вопрос который я связал, был удален, я поместил его здесь:

Вопрос


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

Так что я искренне любопытен. Что мне не хватает? Что делает PHP хорошим языком?

Вот мои причины не нравиться:

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

  • PHP имеет непоследовательное упорядочение параметров встроенных функций, например array_map vs. array_filter, что раздражает в простых случаях и вызывает все виды неожиданного поведения или хуже.

  • Разработчики PHP постоянно осуждают встроенные функции и функции более низкого уровня. Хорошим примером является то, что они устарели для пропусков для функций. Это создало кошмар для тех, кто делает, скажем, функцию callbacks.

  • Отсутствие рассмотрения при редизайне. Вышеупомянутое отклонение исключило способность во многих случаях предоставлять значения ключевых слов по умолчанию для функций. Они исправили это в PHP 5, но они отказались от передачи по ссылке в PHP 4!

  • Плохое выполнение пространств имен (ранее не было именных пространств). Теперь, когда существуют пространства имен, что мы используем в качестве символа разыменования? Backslash! Символ, используемый универсально для экранирования, даже в PHP!

  • Слишком широкое неявное преобразование типов приводит к ошибкам. У меня нет проблем с неявными преобразованиями, скажем, с плавающей точкой в ​​целое или обратно. Но PHP (последний раз я проверил) с радостью попытается магически преобразовать массив в целое число.

  • Плохая производительность рекурсии. Рекурсия - принципиально важный инструмент для написания на любом языке; он может сделать сложные алгоритмы намного проще. Плохая поддержка непростительна.

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

  • PHP поощряет (практически требует) взаимодействие обработки с презентацией. Да, вы можете писать PHP, который этого не делает, но на самом деле проще писать код в неправильном (с точки зрения дизайна звука).

  • Производительность PHP является ужасной без кэширования. Кто-нибудь продает коммерческий продукт для кеширования для PHP? О, смотрите, дизайнеры PHP делают.

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

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

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

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

Так убедите меня в противном случае!


Наилучший ответ


Я возьму удар, отвечая на каждую из ваших маркеров

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

Я люблю и ненавижу эту тему. Потому что по своей сути эта проблема верна. Почему функция би-слова разделяется с подчеркиванием, а некоторые нет? Почему параметры иглы и сената иногда заменяют позиции в подписи аргумента? Это смешно. Но в конце концов... это действительно имеет значение? Моя IDE с intellisense и php.net просто обозреватель браузера, это просто не большая сделка. Является ли это негативным для PHP как языка? Да. Это мешает моей способности быть эффективным программистом? Нет.

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

Лично я считаю, что это не очень хорошо. Отвращение необходимо для эволюции языка, особенно такого, который имеет столько же, сколько PHP. PHP получает много флэков для "упрощения работы с плохим программистом", но в то же время у группы PHP также возникают проблемы, когда они пытаются удалить глупые конструкции с языка, такие как переадресация вызова -Справка. Устранение переадресации вызова по времени было одним из лучших шагов, которые они когда-либо делали. Не было более легкого способа, чтобы начинающий разработчик стрелял в ногу, чем с этой "особенностью".

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

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

Плохое выполнение именных пространств (ранее не было именных пространств). Теперь что существуют пространства имен, что мы используем как символ разыменования? Backslash! Используемый символ универсально для экранирования, даже в PHP!

У меня смешанные чувства по этому поводу. Часть меня думает, "кто заботится, побег характера не имеет никакого значения за пределами строки в любом случае", и часть меня думает "наверняка, они могли бы использовать что-то лучше". Но могли ли они? Я не знаю, я не разработчик для парсера Zend. Это огромный надзор, который до 5.3 PHP никогда не имел пространства имен вообще? Да, абсолютно.

Слишком широкое неявное преобразование типа приводит к ошибкам. У меня нет проблем с неявные преобразования, например, float to целое или обратно. Но PHP (последний я проверено) будет с радостью магически преобразовать массив в целое число.

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

Плохая производительность рекурсии. Рекурсия является принципиально важным инструментом для запись на любом языке; он может сделать сложные алгоритмы намного проще. Бедные поддержка непростительна.

PHP - это DSL для Интернета. Я делаю это полный рабочий день в течение 8 лет и, возможно, использовал рекурсию 4 или 5 раз, как правило, для некоторого типа раздражающего каталога или обхода XML. Это просто не шаблон, который часто необходим для веб-разработки. Я не оправдываю медленную производительность, но это академическая проблема гораздо больше, чем проблема производства. Если вам нужна действительно мощная рекурсивная производительность, PHP уже не тот язык для вас.

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

Я полностью согласен с этим на 100%.

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

* Хммм, эта тема звучит отчаянно знакомой...

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

Производительность PHP является ужасной без кэширование. Кто-нибудь продает коммерческую кеширование продукта для PHP? О, посмотри, дизайнеры PHP делают.

Вы имеете в виду кэширование bytecode (например, ускоритель) или выходное кэширование?

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

Если вы говорите о кэшировании вывода, я не знаю, что вам сказать. ЛЮБОЙ веб-проект со значительным кэшированием трафика (например, подкаст семян # 27). Это не проблема, специфичная для PHP.

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


Второй лучший ответ


Все ваши критические замечания (и некоторые другие) действительны. Вам разрешено и даже ожидать ненавидеть PHP.

Но, опять же, он имеет некоторые преимущества:

  • Повселокальный
  • Быстрое (особенно использование кэшей операций операций)
  • Огромное сообщество (и отличная документация)
  • Работа

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


Третий рейтинг >


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

Simple. Тот факт, что бедные программисты очень защищают свой язык.;) PHP легко узнать, намного проще, чем альтернативы, и как только вы его узнали, это не совсем очевидно: 1) что с PHP, 2) как альтернативы лучше, и 3) как переключиться на и узнать, один из альтернатив.

И, возможно, тот факт, что, какие альтернативы есть у людей? ASP? У этого есть много проблем самостоятельно, из-за невозможности запуска на большинстве веб-серверов (Apache), на некоторые смешные и переработанные варианты дизайна самостоятельно (веб-формы? ViewState? AJAX, где ваши асинхронные запросы перехватываются и запускаются последовательно? ) Рубин на рельсах? Ну, возможно, кроме того, сколько веб-серверов поддерживают его снова? На данный момент он не совсем легко доступен. И это медленно. Поэтому, возможно, PHP "сила" действительно такова, что нет хорошей альтернативы. По крайней мере, именно поэтому я всегда избегаю любого веб-программирования. PHP отстой, и я тоже не слишком увлекаюсь ни одной из альтернатив.

PHP имеет так много фундаментальных проблем, что это даже не смешно. Из-за отсутствия поддержки unicode, ко многим неявным преобразованиям типов, которые часто приводят к неожиданным дырам в безопасности, к полному смешиванию презентации и... всего остального или к модулю базы данных по умолчанию, который не (последний раз я проверял) параметризованные запросы. Мы говорим о языке, сделанном для двух вещей: доступ к базе данных и генерация HTML, и что ужасно для обоих.

Это просто неприятный беспорядок, язык, разработанный людьми, которые не имеют соответствующей квалификации или способны разработать язык.;)


Ответ 5

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

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

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

Ответ 6

Проверьте этот похожий вопрос - Может ли PHP обрабатывать сайты уровня предприятия, а также Java.

Recupping - Facebook, Wikipedia, Yahoo.com, Digg, Flickr и многие другие гигантские сайты работают на PHP. Если вы когда-нибудь приблизились к тому, чтобы сделать что-то из этого калибра, вы все равно можете быть уверены, что можете попасть туда с PHP.

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

Ответ 7

Для меня, говоря о больших или даже огромных проектах, он (прежде всего) сводится к одному слову: Зависимости.

Проблема с языком сценариев похожа на все в мире: наибольшее преимущество - это самый большой недостаток в то же время.

Наибольшее преимущество - свободный и быстрый код. Просто напишите script, и он будет его использовать. Не требуется многословия, просто код.

Наибольший недостаток заключается в том, чтобы убедиться, что этот script не мешает другим скриптам. Или лучше: измените старые script другие. Вы уверены, что все зависимости работают по вашему желанию?

Это неверно для "нормальной" генерации веб-страниц, что бы ни означало здесь. Но у нас есть продукт, основанный на некоторых 500k строках исходного кода, с настройками для клиентов, состоящими из дополнительных 100k строк кода. И я смертельно рад, что компилятор проверяет все зависимости и предупреждает/делает ошибки на случай, если я сделал что-то неправильно (например, говоря на низком уровне здесь, ошибочно указав вызов переменной или метода).

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

Ответ 8

Наша компания управляет несколькими крупномасштабными веб-сайтами с использованием PHP и не имеет проблем, связанных с языком.

Ответ 9

Все это хорошие ответы.

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

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

Спасибо всем!

Ответ 10

Что-то о построении PHP-языка, которое для меня недостаточно. Например, имя функции. Непревзойденная практика использует несколько способов назвать функцию на одном языке. Смесь между подчеркиваниями (имя_функции), слова склеиваются (имя функции) и т.д. Я имею в виду, что это действительно беспорядок. Слишком много функций, которые очень похожи или делают одни и те же вещи, но их имена настолько запутывают. Это не характерно для хорошего языка программирования.

В больших развертываниях язык должен быть достаточно простым и специфичным для записи. Что-то, что PHP опускает, как объявление переменных типов, становится очень трудно понять и разобраться с ним позже.

Другая точка - это постоянное добавление функций и отмена некоторых других. Он предполагает, что добавление OOP на PHP 5 облегчит программистам задачу, но как насчет соображений обратной совместимости?

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

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