Статьи

Pro-PHP Rant

Хорошо — далее отсюда и более поздний комментарий от Тима (и на самом деле больше это напыщенная речь от Йонаса Мавра );

Как насчет того, чтобы кто-нибудь прислал мне хорошие про-PHP ранты?

Итак, вот некоторые про-PHP разглагольствования …

Это модель исполнения

Ориентируясь на PHP как модуль Apache, две большие вещи это то, что он работает и он масштабируемый . Более того, ни у кого на самом деле нет модели исполнения, которую можно сравнить с ней, кроме, возможно, Microsoft с ASP 3.0, от которой они отказались. Прежде чем взлететь, подумай об этом.

Здесь уже давно пытались объяснить основы — важная вещь (по сравнению с сервером приложений mod_perl / mod_python / mod_ * или даже «X») — это интерпретатор, возвращающийся в новое состояние после каждого запроса (без глобальных переменных). торчать или иначе). PHP действительно ничего не поделился . Вы хотите масштабировать? Попробуй здесь .

Между тем, в наши дни энтузиазма по поводу длинного хвоста, кроме PHP, вы мало что слышите о том, когда что-то хреново. Говоря конкретно, не приносите мне свой FastCGI, если вы не предоставляете бесплатные SMS, чтобы я мог его использовать, чтобы я мог предупредить себя, когда он выйдет из строя. Есть небольшие сайты, которыми я владею / управляю, построенные на PHP, на которые я не смотрю уже несколько месяцев, но все же, как ни странно, работаю в следующий раз, когда я туда иду — будь это впечатление или нет, PHP просто продолжает работать — перезапустите Apache или перезагрузка и он вернулся без усилий сисадмина.

Будучи немного более конкретным, модель выполнения, которую PHP тестирует чаще всего, это mod_php и CGI, где нет «долго выполняющихся скриптов» и нет необходимости в потоках. PHP оптимизирован для этой среды. В отличие от Perl, Python и Ruby являются языками общего назначения и оптимизированы для различных требований. Сеть — это просто еще одна платформа, которую они поддерживают, по сравнению с PHP, где сеть является основной платформой. Это можно выразить в терминах параметров конфигурации, таких как max_input_time и post_max_size — с PHP у этих проблем кто-то задумывался о них.

Отличная поддержка базы данных

Давайте начнем с обычной придирки — у PHP нет общего API для абстракции базы данных. В любом случае, это всегда было фальшивкой — сам SQL редко переносим, ​​а написание приложения для конкретной базы данных требует особой работы, поэтому ваш API-интерфейс такой же, как и для какой-либо другой базы данных, в значительной степени не имеет значения. При этом общий API действительно облегчает процесс обучения, если вы начинаете другой проект с другой БД, но первоочередной задачей PHP является предоставление «специфичных для поставщика» функций, таких как pg_send_query или mysql_unbuffered_query . Иными словами, большинство API-интерфейсов БД PHP имеют непосредственное отношение к клиентскому API-интерфейсу вендоров, и вы получаете преимущество, которое заключается в том, что вы не теряете функции и не должны бороться за них.

Это не значит, что у вас не может быть своего торта абстракции БД в PHP — больше всего я доверяю ADOdb — нативной реализации PHP (примечание: разработчикам Python может быть интересно знать, что Джон также поддерживает версию ADOdb для Python). Также есть PDO, который (и я бы сказал, что-то), аналогичный DBI Perl. Также следует указать PEAR :: DB , PEAR :: MDB2 и Creole . И не заводите меня на ORM …

Чего не скажешь, так это того, что PHP теперь может иметь лучшую (как в большинстве стабильных и полнофункциональных) среди всех поддерживаемых db поддержку Perl, Python и Ruby, что, с одной точки зрения, имеет смысл, учитывая число пользователей PHP. Поддержка PHP в БД лучше, чем в Python или Ruby, что, вероятно, не новость, но по сравнению с Perl, недавно был удивлен, обнаружив, что DBI не поддерживает коллекции Oracle, как в PHP . Возможно, это просто урод, но, возможно, нет — кто-то с опытом там поделиться?

PHP массивы

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


points = {}
points[(1,2)] = 2
points[(2,4)] = 4

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

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

В более общем смысле, существует виртуальное веб-кольцо (как 90-е годы) ненависти к PHP, которое начинается здесь . 90% критики, которую вы обнаружите здесь, просто не имеет значения (однажды я собираюсь сделать это подробно, если мне не мешает) — это либо не проблемы для веб-разработки, либо исчезает с кривой обучения PHP (американские горки) (например, бесконечные функции в глобальном пространстве имен не имеют значения, если вы пишете классы). Однажды я также могу по своему усмотрению понять, почему PHP отстой (в смысле Бьярне Страуструпа и «Есть только два типа языков: те, на которые люди жалуются, и те, которые никто не использует»), которые я ожидаю совсем другая история. Сегодня вы должны извинить меня за то, что я фокусируюсь только на хороших вещах.

Расширение SPL

Если исходить из массивов, это большая причина использовать PHP5, если вы программист. Это делает несколько классов проблем, связанных с Интернетом, нелепо легко решаемыми и дает вам синтаксическую радость, если вы этого захотите. Некоторое дальнейшее чтение здесь , здесь , здесь , здесь и здесь .

Поддержка PHP 5 (.1) XML

Один для Тима — отличная поддержка XML в PHP 5 (.1), благодаря libxml2 . И дело не только в том, что основной синтаксический анализатор хорош, а в том, что у вас есть несколько API-интерфейсов на PHP, а именно SAX и более быстрый «инвертирующий» XML pull-ридер , SimpleXML и DOM , а также вспомогательный набор XSLT и т. Д. Конечно, Python, Perl, Ruby и т. Д. Также имеют оболочки libxml2, но это по-прежнему сильная сторона PHP, плюс libxml2 стала ядром возможностей XML в PHP, а не другой альтернативой.

То, что говорит, что работает … работает

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

Иными словами, PHP стал предсказуемым, по крайней мере, для меня и всех, кто хочет пройти курс обучения. Это означает, что если мне нужно дать оценку проектов, например, я знаю, когда я могу их придерживаться. Мне также было легко учить других — требуется около недели, чтобы программист смог написать полезный PHP, если я смогу работать с ними напрямую. Я предпочел бы обменять (немного больше) многословный синтаксис и обеспечить своевременную доставку за 15 минут синтаксической славы, за которыми следуют 10 часов поиска ошибок и еще 15 часов обходного пути. К счастью, не все думают, что так или иначе прогресс остановился бы.

Юникод и ICU

Говоря о вещах, которые уже есть у PHP, стоит помнить, что PHP6 использует ICU как часть своего «ядра» — смотрите здесь , здесь и здесь . PHP6 уже «существует» в CVS, и если он ограничен только изменениями в Юникоде, это меньше, чем PHP5, и может оказаться здесь раньше, чем позже. Тогда вы сможете утверждать, что PHP поддерживает Unicode лучше, чем Perl и Python.

Застрял в маленьких коробочках

Это граничит со священной войной, которую я не хочу. Недавно языковые разногласия вернулись «внутрь», и если вы отнесетесь к этому серьезно, вы можете поверить, что Perl, Python и PHP все мертвы и есть только Ruby. Для меня это просто Руби (справедливо), борющийся за пространство рядом с другими, и это лучше всего рассматривать в перспективе здесь .

Будучи счастливым в Perl, Python и PHP в наши дни, наблюдая, как люди плачут: «Этот rox, все остальное sux», граничит между забавой и разочарованием. Синтаксис — это только одна часть истории . Библиотеки, для меня, большая часть — какой смысл использовать синтаксис, если вы ничего не можете с этим сделать или вам нужно потратить время на переизобретение колес?

Например, Perl похож на удобные тапочки в командной строке — отведите меня от Getopt :: Long и POD :: Usage и начните кричать. Мелочи, которые имеют значение. И обнаружили, что Perl способен переносить большие блоки данных вокруг БД на скоростях, сравнимых с SQL * Loader .

Тем временем один раз использовали wxPython всерьез ( скоро выйдет книга !) — ни один из других динамических языков не может сравниться с ним — да, есть wxPerl, wxRuby (** кашель ** wxHaskell) и даже wxPHP, но они не являются зрелыми для сравнения — проверьте загрузку IDE Activegrid в «/ src / python / wxPythonDemos / ide» — в наши дни мы все можем написать свои собственные IDE… А у Python есть грязный секрет отличной поддержки Windows . Если бы у меня было время записать, я бы с удовольствием взял эту демонстрацию расширения пространства имен оболочки и оболочку Python libssh2 и сделал диск GMail для scp.

Дело в том, что люди прыгают на языке, а потом утверждают, потому что он хорошо выполняет одну задачу, это единственный инструмент для всего. Это действительно позор, время тратится на wxRuby / wxPerl или иначе, учитывая, что wxPython уже там. Нам гораздо стыднее, что мы изобрели бесконечные движки шаблонов для сети — не только потраченное впустую время разработки — также потраченное впустую время пользователя на их идентификацию и обучение (это приводит их в Microsoft). И это не просто переосмысление — это то, что мы даже не делились идеями и не видим их распространение — Джефф давно создал шаблоны, но сегодня вы найдете разработчиков Ruby, обсуждающих плюсы и минусы фигурных скобок и атрибут для шаблонов. ,

Специфично для PHP, если вы принимаете некоторые вещи, которые он действительно делает хорошо, в частности, модель исполнения, тогда это становится больше вопросом о том, как извлечь максимальную пользу из всех миров. На мой взгляд (исходя из того, чем я доволен), это Perl в вашем бэкэнде для sysadmin, перемещения данных и т. Д., Python помогает пользователям публиковать свои материалы для MS Office и PHP для их распространения по всему миру.

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

Вкратце: PHP Schwarz больше!