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

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

будучи в первую очередь разработчиком PHP, я задаю два вопроса:

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

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

мысли?

11 ответов


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

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

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

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

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


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

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

и

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

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

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


нет причин, по которым вы не можете использовать 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 по всем вышеперечисленным причинам, но у него есть свои проблемы: а именно, что использование длинных текстовых полей приводит к сбоям mysql и сделано, по крайней мере, с 2005 года без исправления (да, я и несколько других подняли ошибку).

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

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

это, как говорится, PHP + memcached / APC + beanstalkd проходит долгий путь.

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


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

вопрос


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

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

вот мои причины для неприязни это:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Лучшие По Рейтингу Ответа


Я возьму удар на ответ на каждый из ваших пулевых точек

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

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

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

лично я думаю, что это не очень хороший момент. Осуждение необходимо для эволюции языка, особенно тот, который имеет столько же kruft, сколько PHP. PHP получает много flak за "упрощение быть плохим программистом*", но в то же время группа PHP также попадает в беду, когда они пытаются удалить глупые конструкции из языка, такие как время вызова pass-by-reference. Устранение ссылки на время вызова было одним из лучших шагов, которые они когда-либо делали. Для начинающего разработчика не было более простого способа выстрелить себе в ногу, чем с помощью этой "функции".

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

Я не думаю, что есть общее отсутствие рассмотрения вообще, я думаю, что вы просто получили ужалили этой конкретной изменения и остались с кислым вкусом во рту. Языковые изменения часто известны месяцами, если не годами раньше времени. Руководство по миграции было предоставлено для перехода с 4 на 5, а различия в версиях описаны в руководстве. Call-time pass-by-reference была ужасной "особенностью" и не дает разработчику никакой выразительной силы, которую они не могут получить другими средствами. Я рад, что он ушел (вместе с другим дерьмом, как волшебные цитаты)

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

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

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

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

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

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

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

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

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

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

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

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

вы имеете в виду кэширование байт-кода (например, ускоритель), или кэширование вывода?

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

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

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


Второй По Рейтингу Ответ


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

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

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

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


Третий По Рейтингу Ответ


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

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

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

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

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



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

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

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


проверьте этот аналогичный вопрос - может ли PHP обрабатывать сайты корпоративного уровня, а также Java

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

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


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

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

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

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

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

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


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


Это все хорошие ответы.

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

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

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


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

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

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

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

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