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

Каковы архитектурные ограничения PHP?

Я читал статью "PHP Sucks, но это не имеет значения" Джеффа Этвуда.

В комментариях он пишет:

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

Каковы эти ограничения и как они сравниваются с другими сценариями/слабо типизированными языками?

Кроме того, каковы альтернативы в тех условиях, где необходимо избегать ограничений?

4b9b3361

Ответ 1

В основном существуют два реальных ограничения:

PHP - полностью синхронный язык. Это влияет на то, что вы легко можете реализовать на PHP, а какие нет. Например, реализация приложения Long Polling не является тривиальным, потому что PHP нужно будет блокировать один процесс на чат. Я не говорю, что это невозможно, вы можете взломать это ограничение, используя некоторую библиотеку PHP Daemon. Я просто говорю, что это один из случаев, когда другие языки, такие как JavaScript, более уместны (NodeJS).

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

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

Ответ 2

Взгляните на дату. Статья написана в 2008 году.

Это означает, что если вы увидите преимущества PHP5.3, вы найдете там много вещей, таких как закрытие и пространства имен, которые раньше были на других языках. Некоторые из них уже затронули архитектуру известных фреймворков, таких как Symphony.

И этот список никогда не будет завершен.


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

Затем некоторые люди думают, что синтаксис inline regex хорош, например, JavaScript, но другие думают, что "разные языки" должны быть записаны в строковых константах там, как в PHP. Etc.

Ответ 3

Я возьму на него удар, не вдаваясь в ничтожество:

  • Начальный дизайн PHP как набора функций по-прежнему показывает.
  • Объектно-ориентированные шаблоны, которые были реализованы в последних версиях PHP 5, по-прежнему наполовину испечены и не имеют множественного наследования (или "mixins" ), правильной поддержки модулей и предназначены для обратной совместимости с CoF (коллекция функции).
  • Переопределение методов и обратные вызовы не поддерживают друг друга.
  • Затворы. Они есть, но они очень слабы.
  • Ошибки против исключений - методы непоследовательны, в которых они используются (опять же, благодаря CoF-дизайну), а обработка ошибок - наполовину испеченная.

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

Ответ 4

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

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

Причина, по которой много кода PHP есть код спагетти, объясняется тем, что примеры и учебные пособия таковы, что они не учат новичков хорошей практике кодирования. Кроме того, люди быстро разбираются в примерах типа hello world или подключаются к MySQL, выполняя запрос и зацикливая на результат - но это то, что там, где ВСЕ обучающие программы останавливаются. Я до сих пор не нашел учебник, который охватывает следующее:

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

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

Многие популярные скрипты были написаны людьми, которые знали ЧТО, которые они хотят достичь, однако они не знали HOW, чтобы правильно спроектировать среду (фреймворк) Разверните свой PHP-код. Вот почему мы видим сценарии, которые становятся невероятно популярными из-за простоты их использования в качестве обычного пользователя, которые трудно расширить, глядя на него как разработчика, используя странные имена функций, нечетные соглашения о кодировании и отсутствие комментариев.

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

Перед тем, как сделать такое выражение, нужно знать несколько вещей:

  • PHP - это язык сценариев, это означает, что интерпретатор вызывается каждый раз, когда кто-то запрашивает страницу PHP, которая занимает A LOT от мощности процессора. Это было рассмотрено с помощью механизмов кэширования байт-кода, таких как APC, который хранит копию предварительно интерпретированного фрагмента script в памяти. Результаты впечатляют, и я вас не устраиваю - выполнение некоторых из моих сценариев идет от 20 миллисекунд до 1 микросекунды, где некоторые выгоды "всего" 5 раз. Это на системе, обслуживающей 1 тыс. Одновременно работающих пользователей. Теперь, если кто-то хочет сказать мне, что 1 микросекунда медленная (или 5 миллисекунд) - я возьму это как ерунду.

  • PHP - это не единственное, что связано с обслуживанием веб-страницы. Там также основной сервер (Apache), у которого есть свои проблемы, есть MySQL, который выполняет запросы, и кто говорит, что все запросы являются оптимальными? Там есть сеть, там жесткий диск, есть процессор, есть тонны других процессов. Настройте Apache с помощью PHP-FPM, оптимизируйте MySQL для работы на 8 основных машинах с 16 гигабайтами RAM, используйте APC, используйте Memcache - и voila, вы получаете невероятно быструю масштабируемую систему, способную обслуживать невероятный объем трафика. Языки, с которыми сравнивается PHP, часто "компилируются" в байт-код и затем выполняются

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

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

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

Ответ 5

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

Сама причина этой статьи, я считаю, это просто. Если вы (или, в этом случае, любой другой программист) использовали для кодирования на С++, Java и т.д., У них было много возможностей, таких как OOP-кодирование, и PHP был ограничен в начале.

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

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

Суть в том, что вы должны знать синтаксис PHP. Когда вам нужно что-то сделать, сначала проверьте, есть ли у PHP то, что вы хотите сделать в своей библиотеке. Проверьте руководство, чтобы узнать, как его использовать. Таким образом, вы также УЗНАЙТЕ (НЕ МЕМОРИЗАЦИЯ) те, которые вы часто используете, и эту информацию трудно будет забыть.

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

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

Поскольку PHP - это известный и открытый веб-скриптовый язык, команда разработчиков Facebook создала HipHop.

Что такое HipHop, он берет данные из PHP и отправляет их на С++. С++ выполняет весь процесс и отправляет результаты в PHP для вывода.

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

Теперь вы говорите мне, если это кажется ограниченным и/или медленным для вас?

Ответ 6

Я не думаю, что есть что-то вроде "архитектурного ограничения" для php. может быть причиной ограничения знаний разработчиков. прочтите http://www.quora.com/What-is-Facebooks-architecture. в большинстве случаев разработчик не мирового класса не знает, как они могут использовать php для своих полных возможностей.

Ответ 7

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

Ответ 8

Ограничения архитектуры в дополнение к nikic answer

Написание расширений для PHP - это PITA. Не так плохо, как с Perl или Java, но не так просто, как могло бы быть. Легкость чемпиона по продлению действия - это TCL, который начинается с начала 90-х. Почти любая функция C, принимающая char *, может быть превращена в расширение TCL.

Встраивание PHP в другие системы. mod_php, gtk.php.net показывает, что это можно сделать, но Guile и TCL гораздо проще вставлять.