Статьи

10 принципов мастеров PHP

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

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


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

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

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

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

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


Никто не должен подвергать сомнению авторитет Мэтта Малленвега с помощью PHP. Он (наряду с бешеным сообществом) разработал самую популярную систему блогов на планете: WordPress . После создания WordPress Мэтт и компания запустили звездный WordPress.com , бесплатный блог-сайт, основанный на базе блогов WordPress MU, для нескольких блогов. На момент написания этой статьи на WordPress.com размещалось более 4 миллионов блогов, и сегодня их пользователи написали более 140 000 сообщений. (Вы можете увидеть более интересную статистику об использовании WordPress.com здесь .)

Если кто-нибудь знает, как масштабировать сайт, это Мэтт Малленвег. В 2006 году Мэтт дал некоторое представление о структуре базы данных WordPress и объяснил, почему WordPress MU использует отдельную таблицу MySQL для каждого блога, а не одну гигантскую «монолитную» таблицу для всех блогов.

Мы проверили этот подход для MU, но обнаружили, что он слишком дорог для масштабирования до определенной точки. С монолитными структурами вы попадаете в стену на основе вашего оборудования. В MU пользователи разделены и могут быть легко разделены, например, на WordPress.com у нас есть пользователи, распределенные между 4096 базами данных, что позволяет очень дешево и эффективно масштабироваться до сотен тысяч и даже миллионов пользователей и чрезвычайно высокого уровня трафика ,

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


Dave Child — это детище (teehee) за недавно переименованным веб-сайтом Added Bytes (ранее ilovejackdaniels.com), на котором были представлены отличные шпаргалки Дейва для многих языков программирования . Дейв работал во многих компаниях-разработчиках в Великобритании и зарекомендовал себя как авторитет в мире программирования.

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

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

Далее Дейв приводит конкретные примеры безопасных практик в первой , второй и третьей частях своей серии «Написание безопасного PHP». Но его окончательный вывод заключается в следующем:

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


Бен Бальбо писал для Site Point , очень уважаемого учебного сайта для разработчиков и дизайнеров. Он входит в состав комитета пользователей PHP в Мельбурне и Клуба разработчиков с открытым исходным кодом, поэтому он знает кое-что о языке. Неудивительно, что Бен работал разработчиком и инструктором по PHP, поэтому он рекомендует немного больше подумать и подготовиться к кешированию PHP .

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

Существует множество различных методов кеширования в PHP, и Бен затрагивает несколько самых крупных в этой статье, например:

  • кешированные вызовы функций
  • установка истечения срока действия заголовков
  • кэширование загрузок файлов в IE
  • кеширование шаблонов
  • Cache_Lite

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


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

Чад считает, что использование IDE, такой как Eclipse PDT (пакет разработки Eclipse для PHP) со смесью шаблонов и фрагментов, действительно может сократить время выполнения проекта.

Занятые графики, длинные списки дел и сроки исполнения затрудняют разработчикам знакомство с некоторыми расширенными функциями, предоставляемыми их инструментами. Это позор, потому что некоторые функции, такие как Eclipse Templates, могут реально сократить время кодирования и ошибки.

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

Используя IDE, такие как Eclipse и пакет PDT, вы обнаружите, что время разработки будет постепенно увеличиваться. Среда IDE автоматически закрывает скобки, добавляет пропущенные точки с запятой и даже позволяет выполнять отладку в редакторе без необходимости загрузки на сервер.
(У Чада есть отличное руководство по началу работы с Eclipse PDT и преимуществам IDE в целом, если вам интересно.)


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

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

Фильтрация данных. Мы все должны это сделать. Большинство, если не все из нас, презирают это. Однако большинству не известны функции PHP filter_ *, которые позволяют нам выполнять все виды фильтрации и проверки. Используя PHP-функции filter_ *, мы можем сравнительно легко проверять и очищать типы данных, URL-адреса, адреса электронной почты, IP-адреса, удалять плохие символы и многое другое.

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


Всегда были споры о том, использовать ли PHP-фреймворк, такой как Zend , CakePHP , Code Igniter или любой другой фреймворк . Есть плюсы и минусы его использования, и многие разработчики имеют собственное мнение о том, идти или не идти по этому пути.

Джош Шарп (Josh Sharp ) — веб-разработчик, который занимается созданием сайтов для клиентов. Вот почему вы должны доверять ему, когда он говорит, что это хорошая идея — использовать PHP-фреймворк, чтобы сэкономить время и устранить ошибки при программировании. Почему? Джош верит, что это потому, что PHP слишком прост для изучения.

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

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


Вопреки убеждению Джоша, что нужно использовать PHP-фреймворк, Расмус Лердорф, сам крестный отец PHP, считает, что фреймворки не так уж хороши. Почему? Потому что они работают намного медленнее, чем простой PHP.

Во время презентации Rasmus на Drupalcon 2008 , Rasmus сравнил время отклика на странице PHP с простым примером «Hello World» и сравнил его с несколькими PHP-фреймворками ( слайды 24-32 ) и показал, что PHP-фреймворки работают намного медленнее, чем прямой PHP.

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

[ Примечание: если вам нужно использовать фреймворк PHP, Rasmus больше всего нравится Code Igniter , так как он «наименее похож на фреймворк» ]


Джек Херрингтон не новичок в PHP и мире разработки. Помимо написания более 30 статей для престижного IBM developerWorks , Джек также опубликовал книги по программированию, такие как PHP Hacks . Джек добросовестный эксперт .

Herrington рекомендует использовать пакетную обработку и cron для решения тех задач, которые могут обрабатываться в фоновом режиме. Веб-пользователи не хотят долго ждать выполнения задач в Интернете. Есть некоторые работы, которые занимают больше времени и которые гораздо лучше подходят для работы в фоновом режиме.

Конечно, в некоторых небольших случаях немного проще запустить вспомогательный поток для обработки небольших заданий. Но легко увидеть, что с использованием обычных инструментов — cron, MySQL, стандартного объектно-ориентированного PHP и Pear :: DB — создание пакетных заданий в приложениях PHP легко, легко развертывать и поддерживать ,

Джек верит в простоту, и вместо использования потоков на серверах он использует простую комбинацию cron, PHP и MySQL для обработки задач в фоновом режиме.

Я сделал и то, и другое, и я думаю, что у cron есть преимущество принципа «Keep It Simple, Stupid» (KISS). Это облегчает фоновую обработку. Вместо того, чтобы иметь многопоточное приложение для обработки заданий, которое работает вечно и, таким образом, никогда не теряет память, у вас есть простой пакетный скрипт, который запускается cron. Сценарий определяет, нужно ли что-то делать, делает это и затем завершается. Не нужно беспокоиться об утечках памяти. Не нужно беспокоиться о остановке потока или попадании в бесконечный цикл.


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

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

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

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

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

Прочитайте предыдущий пост из этой серии: 10 принципов мастеров CSS .

Вы можете прочитать больше советов по веб-разработке в его блоге Web Jackalope .