Статьи

Почему 2013 год — год PHP

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

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


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

Однако, прежде чем вносить какие-либо изменения, вы должны спросить себя: «Почему у PHP такая стигма?»

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

Примерно восемьдесят процентов аргументов против PHP коренятся в невежестве.

Есть новички, которые действительно не знают, как работает PHP. Это приводит к таким вопросам, как « Почему вы не можете прослушивать события кнопок с помощью PHP? », И аналогичным вопросам об AJAX.

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

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

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

Что такое PHP-FIG? «Идея группы заключается в том, чтобы представители проектов говорили об общих чертах между нашими проектами и находили способы совместной работы. Наша основная аудитория — это друг друга, но мы очень хорошо понимаем, что остальное сообщество PHP наблюдает. другие люди хотят принять то, что мы делаем, они могут это сделать, но это не цель ».

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


Однако в каждой критике есть доля правды.

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

Эти несоответствия не без причины, хотя. PHP начинался как то, что мы сегодня называем языком шаблонов. С тех пор он прошел через множество смен парадигм, трансформировавшись в функциональный язык, такой как C, а затем в полностью ООП-язык, которым мы наслаждаемся сегодня. Попутно появились лучшие практики, и разные люди контролировали то, что было добавлено. Это приводит к большому количеству «разных» типов кода на одном языке. Теперь вы можете спросить: « Почему бы просто не осудить плохие части? »

Ответ на этот вопрос такой же, как и то, почему мы до сих пор создаем сайты для старых версий Internet Explorer. Не пойми меня неправильно; Я хотел бы просто бросить это, но такие масштабные изменения не могут быть сделаны без небольшого количества времени. Надеемся, что со временем PHP будет продвигаться дальше в ООП и начнет преобразовывать свои объекты, чтобы использовать их функции с точечной нотацией, а не по общепризнанному неуклюжему синтаксису -> . Итак, вместо array_push($arr, "Value"); , вы бы написали что-нибудь, например, $arr.push("Value"); ,

Не волнуйся; такие вещи происходили медленно. Просто посмотрите на новые возможности PHP 5.5. Старая функционально-ориентированная надстройка MySQL устарела в пользу более нового объектно-ориентированного подхода.


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

Давайте рассмотрим следующее:


Сообщество PHP теперь может перестать изобретать велосипед снова и снова.

Вдохновленные инструментами, такими как Bundler и NPM, сообщество PHP теперь может перестать изобретать колесо снова и снова, благодаря Composer. Node.js был первым языком, который заставил меня чувствовать себя комфортно при использовании пакетов. Если вы использовали это раньше, то вы понимаете, о чем я. Пакеты устанавливаются локально в каталог вашего проекта, для большинства плагинов легко найти документацию, и сравнительно просто представить свои собственные пакеты.

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

Если вы хотите, вы можете выбрать и свои компоненты.

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

Кроме того, Composer является легким приложением — написанным на PHP, само по себе — и поставляется с функцией автозагрузчика. Это работает на основе стандарта PSR-0 (упомянутого выше), который автоматически загружает ваши зависимости по мере необходимости, поэтому ваше приложение остается максимально чистым.

Все эти функции являются определенным улучшением, однако без принятия сообщества это ничего не значит. Я рад сообщить вам, что это было очень хорошо принято. Крупные проекты, такие как Symfony и Laravel, уже загрузили свои компоненты в библиотеку Composer, Packagist . Разделение фреймворка на компоненты означает, что вы можете легко создать свой собственный фреймворк в соответствии с вашими предпочтениями. Другими словами, больше нет раздутых рамок. Если вы хотите, вы можете выбрать и свои компоненты.

Нужен пример? Вы можете взять компонент базы данных из Laravel и связать его с компонентом шаблонов из среды Symfony. Фактически, сама среда Laravel использует множество хорошо протестированных компонентов Symfony. Зачем восстанавливать колесо, если вместо этого вы можете сосредоточить свои усилия на других областях?


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

Теперь это не будет статья о будущем PHP без более подробного обсуждения Laravel. Нас часто спрашивают, почему Nettuts + толкает Laravel так же сильно, как и раньше. Это неправильный вопрос. Вместо этого спросите » Почему бы нет? «

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

Laravel поставляется с Eloquent , ORM, который полностью переосмысливает все, что связано с базами данных. Я в основном использую MySQL с PHP; то, что вы получаете из базы данных, это объект ресурса, который затем вам нужно запустить через функцию для захвата результатов. В Laravel все возвращается как стандартный PHP; Вам даны объекты, которые вы можете изменить и сохранить. Вы можете делать что-то, например, объединять результаты из нескольких таблиц, чтобы сэкономить на вызовах базы данных (называемых «быстрой загрузкой»), и смехотворно простыми действиями, такими как проверка и пользовательские запросы. В качестве бонуса, если вам не нравится SQL, все это можно сделать в стиле ООП, используя простые и читаемые методы, такие как find и delete .

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

Если вы хотите больше узнать о Laravel, я рекомендую курс Tuts + Premium, Laravel Essentials , который ведет наш собственный Джеффри Уэй. Я говорю это не как часть персонала Nettuts +, а как человек, который смотрел сериал. Я могу честно сказать, что я не знал, что происходит с Ларавеллом, и Джеффри отлично справился с работой, насколько это было возможно.

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


Следующее, что я хотел бы обсудить, — это обновления PHP, выпущенные в 2012 году. С выпуском версии 5.4 появилось множество отличных новых функций. Для полного обзора обновлений вы можете взглянуть на эти две статьи здесь, на Nettuts +: статья 5.4, статья 5.5 .

Но, для быстрого резюме моих любимых:

  • Черты добавляют возможность создавать «частичные» класса, которые позволяют вам создавать согласованные объекты, не переписывая все снова и снова.
  • Генераторы позволяют вам делать некоторые интересные вещи со списками данных, а также позволяют вам воспользоваться всеми функциями, которые поставляются с ленивой оценкой.
  • Еще одним замечательным дополнением является встроенный веб-сервер, который позволяет тестировать ваши приложения с различными версиями PHP без необходимости использования чего-либо вроде Apache.
  • Разыменование не является основным дополнением, но приятно иметь возможность ссылаться на дочерние элементы без использования функций. Это включает в себя такие вещи, как доступ к отдельным символам константы с использованием только квадратных скобок.
  • С новым API вам предоставляется возможность как шифровать строки, так и проверять и укреплять пароли — и все это без знания bcrypt или любого другого алгоритма хеширования.

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


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

Подумайте о своем проекте, прежде чем погрузиться, как ковбой.

Много раз вы намеревались написать некоторый код, но потеряли что-то в переводе. Под этим я подразумеваю, что вы планируете одну вещь, но при ее реализации вы теряете немного целостности или функциональности. Другая распространенная проблема возникает при написании кода для больших проектов: в результате вы получаете несколько классов и файлов, каждый из которых имеет свои зависимости. То, что у вас осталось, — это «переплетенная эволюция» функциональности, которую может оказаться трудно отслеживать и поддерживать. Как и в игре Jenga, обновляя одну часть, вы можете сломать другую, нанося вред вашему приложению. Это всего лишь два примера, но есть и другие.

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

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


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

Так что ты думаешь? Ты на борту? Не согласен со мной? Если так, давайте продолжим обсуждение ниже!