Дайджест интересных новостей и материалов из мира PHP за последние две недели №12 (25.02.2013 — 11.03.2013)
.png)
Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.
Приятного чтения!
Новости и релизы
- Optimizer+ будет включен в PHP 5.5 [1] — За последние две недели произошел целый ряд событий, связанных с включением Zend Optimizer+ в PHP. Было запущено голосование, которое, напомним, предполагало 3 варианта развития событий: 1) Включить в 5.5, даже если это немного задержит релиз; 2) Если для интеграции необходимо задержать релиз 5.5, то включить в 5.6; 3) Не включать в PHP, предоставить только из PECL. Сначала пакет стал доступен из PECL [2], а затем по результатам [1] голосования Зеевом Сураски в php-internals было оглашено решение о включении Optimizer+ в качестве zend_extension в дефолтной поставке PHP, а в версии 5.6 планируется уже интегрировать в ядро. Данное сообщение породило массу обсуждений, так как некоторые считают, что такое решение требует 2/3 на голосовании. Но все-таки включение оптимайзера никак не отражается на синтаксисе языка, да и по умолчанию соответствующая опция в php.ini, вероятно, будет установлена в Off. Ну что ж, покойся с миром предсказуемый релиз-процесс PHP: еще одна альфа, а бета вновь откладывается. Но ради таких результатов [3] хотелось бы получить кэширование опкода из коробки на год раньше.
- Релиз PHP 5.5.0 Alpha6 [4] — Сам по себе релиз содержит всего несколько [5] исправлений ошибок, найденных в предыдущей альфе, но примечателен тем, что служит для отсрочки релиза беты, в которую уже будет включен Optimizer+.
- Вышел в свет Symfony 2.2 [6]
— Долгожданный релиз работа, над которым велась 6 месяцев. Подробнее о новых возможностях в посте [7]
.
- Первая бета Phalcon 1.0.0 [8]
— Спустя год после появления на свет этот необычный PHP фреймворк дожил до первой версии.
- 12й выпуск журнала Web & PHP [9] — В юбилейном выпуске (журнал выходит уже год) раскрыты следующие темы: использование рекурсии в PHP; использование PECL; исправление ошибок в продакшене с помощью APM и многие другие.
- О PHP-FIG [10] — Matthew Weier O'Phinney, архитектор и лидер проекта Zend Framework, заявил о том, что покидает PHP-FIG [11], группу принимающую стандарты PSR. В посте, он приводит причины, которые заставили принять его такое решение. Вкратце, есть более важные вещи, на которые автор хотел бы тратить время чем споры о том, что использовать табуляцию или пробелы, где ставить фигурные скобки и т.п.
PHP
- Как на самом деле работает foreach [12] — Самый подробный ответ на StackOverflow, который вы могли встретить. Core PHP разработчик Никита Попов расставляет все точки над работой цикла foreach.
- Следующая большая вещь в PHP [13] — Описав свое видение текущего состояния дел в PHP, авторы поста утверждают, что если все будет продолжаться в таком же духе, то PHP скоро умрет. Да, проживет 5, может быть 10 лет и умрет. По их мнению, чтобы не допустить этого PHP 6 должен вносить кардинальные изменения, направленные на производительность, а об обратной совместимости вообще призывают забыть. Кроме таких радикальных заявлений, авторы вносят действительно важное предложение: создать возможность обычным PHP-пользователям участвовать в развитии языка. Одним из авторов даже создан соответствующий RFC [14], в котором предложено добавить на php.net открытые голосования с тем, чтобы получить обратную связь от пользователей.
- О предсказуемом цикле релизов PHP [15] — Небольшой пост, в котором автор в связи с недавними новостями об Optimizer+ высказывает мнение о том, что стабильный и предсказуемый процесс релизов очень важен для разработчиков. А поспешное включение ZO+ в язык в виде zend_extension ничего по сути не дает: на shared хостингах его не будет и через год, а те, кто имеют возможность использовать последние версии PHP на сервере, могут просто поставить Optimizer+ из PECL.
Материалы для обучения
- Функциональное программирование на PHP [16] — Совсем недавно тема [17] уже проскакивала в дайджесте и, тем не менее, хороший пост, в котором раскрыты базовые принципы функционального программирования и их применение в PHP.
- Фильтр Блума на PHP [18]
— PHP реализация вероятностной структуры данных [19], позволяющей компактно хранить множество элементов и проверять принадлежность заданного элемента к множеству. Например, автор применяет фильтр, чтобы проверить существование слова или фразы в словаре >10000000 слов.
- Модульное тестирование на PHPUnit [20], 2 [21], 3 [22], 4 [23] — Совершенно полное руководство по модульному тестированию для начинающих, в котором в четырех частях рассмотрены все аспекты использования PHPUnit, начиная с установки и заканчивая продвинутыми техниками использования.
- Меры, которые следует предпринять если ваш PHP сайт оказался взломан [24] — Если в предыдущем посте [25] автор рассматривал диагностику: как узнать, что ваш сайт был взломан, то на этот раз рассмотрено «лечение»: перечислены шаги, которые помогут избавиться от зловредного кода. Кроме того приведены рекомендации по предотвращению повторного взлома и заражения.
- Интегрируем OAuth с помощью Opauth [26] — Небольшой туториал по использованию мульти-провайдерного фреймворка для аутентификации через OAuth в PHP приложениях. В посте рассмотрен пример интеграции с CodeIgniter, но существуют реализации для всех популярных фреймворков. Список [27] поддерживаемых из коробки провайдеров внушителен.
- Соблюдение стандартов PCI и PHP разработчики [28] — В статье коротко рассказано о том, что же такое PCI стандарты, рассмотрены основные мифы их окружающие, а также дан обзор основных моментов. Более подробно автор останавливается на пунктах, непосредственно связанных с бэкенд разработкой веб-приложений.
- Устанавливаем XHGui [29] — Небольшой туториал по установке и использованию отличного инструмента для профилирования кода. Чуть более подробный туториал уже был тут [30].
- Contributing to Paratest [31] — Небольшая статья, в которой автор рассказывает преимущества использования инструмента Paratest для параллельного выполнения тестов, а также рассказывает о новых улучшениях, которые были предложены сторонними разработчиками и призывает всячески помогать и участвовать в развитии проекта.
- Масштабирование приложений на Silex. Использование RouteCollection [32] — В этом посте автор улучшает свой пример приложения из предыдущей статьи о масштабировании Silex приложений [33], и на этот раз использует RouteCollection для определения маршрутов вместо контейнера DI из Symfony. Весь код доступен на GitHub [34].
- Behavior Driven Development [35] — Небольшой обзор концепции BDD в общем и Behat в частности.
- D значит документация [36] — В посте автор рассматривает последний принцип из набора LUCID [37] — документирование. По аналогии с TDD, автор предлагает свой подход к программированию — Documentation Driven Development. Такой подход предполагает, что разработчик сначала пишет документацию и комментарии к коду, затем тесты, а уж после всего приступает непосредственно к коду. В посте также приведен небольшой пример, иллюстрирующий данный поход (без тестов).
- Проблемы, эффективность и отношение группы PHP-FIG [38] — Новость о том, что одна из ключевых фигур покидает PHP-FIG, безусловно, имела резонанс. Автор поста хоть и не является членом PHP-FIG, тем не менее, излагает дельные соображения по поводу дальнейшей судьбы группы. Кроме самого поста, рекомендуем обратить внимание на комментарии, где так же изложены интересные мысли по теме.
- Создаем ePub с помощью PHP и Markdown [39] — Хороший туториал, в котором показано, как из Markdown-документов создать ePub-книгу с помощью библиотек md2epub [40] и RainTPL [41].
- Valitron The Simple Validation Library That Doesn't Suck [42] — Автор попытался найти простую и удобную библиотеку для валидации данных пользователя, которая не была бы громоздкой и не имела зависимостей. Не найдя такую, автор написал свою библиотеку Valitron, обладающую всеми перечисленными особенностями. Больше примеров использования можно найти на GitHub [43].
- Rock On, Refactor, or Re-roll? [44] — Наверняка вы встречались с ситуацией, когда разрабатывая что-нибудь для себя вам вдруг по каким-либо причинам приходится отложить разработку на некоторое время, а вернувшись к делу вы обнаруживаете, что на многие участки кода смотрите иначе и хотели бы сделать по-другому/лучше. В этом случае перед вами стоит выбор: продолжить начатое, рефакторить или переписать все с нуля. Как раз о таких ситуациях данный пост. Автор описывает свой опыт и дает рекомендации по принятию решения.
- Сделаем конференции лучше [45] — Автор поста любит PHP-конференции и часто выступает с докладами на самых разных из них. В посте же он делится несколькими идеями о том, как сделать конференции более полезными, а значит более интересными для широкого круга разработчиков.
- Экспорт избранного Хабра в FB2 — скоростная PHP-версия [46]
— Автор поста создал полезное приложение на PHP для создания книги из ваших избранных постов. Для разбора статей была использована библиотека phpQuery [47].
- Предотвращаем ухудшение кода со временем с помощью модульного тестирования [48] — В статье идет речь о том, что такое «гниение кода» [49]. Конечно же, сам код с течением времени не меняется, но окружение может измениться сильно, а это может привести к непредсказуемым результатам. Авторы приводят ряд рекомендаций и примеров по тестированию кода, для того чтобы избежать подобного.
- Полное руководство по командам в Laravel [50] — Большой и подробный туториал по Artisan — утилитам командной строки в Laravel и написанию пользовательских команд.
- Почему не следует использовать .htaccess (AllowOverride All) [51] — в продакшене Автор уже публиковал в своем блоге результаты небольшого исследования Почему FastCGI с Nginx настолько быстрее Apache с mod_php? [52], в котором обнаружил что узким местом при использовании Apache является директива AllowOverride All. На этот раз автор опубликовал чуть более подробное исследование, а также привел пример конфигурации httpd.conf для Magento [53].
- RESTful APIs на ZF2, Часть 3 [54] — Продолжение серии статей о построении RESTful интерфейсов. Автор продолжает описывать общие концепции REST, и на этот раз касается документирования вашего API.
- Перегрузка: создаем методы класса на лету [55] — В большинстве языков программирования перегрузка означает возможность описания нескольких методов с одним именем и различным числом аргументов. Перегрузка в PHP означает возможность динамически «создавать» свойства и методы. В своем посте автор на примере показывает использование «перегрузки». Описан класс доступа к базе данных и получение записей с помощью методов getBy (например, по id или username — getById() и getByUsername() соответственно) реализованных через «волшебный» __call().
- Confoo: тестирование, производительность, метрики и API [56] — Слайды нескольких полезных докладов с прошедшей в Монреале конференции Confoo [57].
- PHP достиг своего предела [58] — Автор перешел с PHP на Ruby, а в посте сравнивает решения типичных задач на Rails и TYPO3, естественно демонстрируя превосходство первого. Может, хватит уже?
- Качество кода [59] — Автор считает, что качество кода — это всего лишь 30% таланта и 70% правильной настройки окружения и процессов. В посте автор описывает те инструменты и методики, которыми пользуется сам для поддержания желаемого качества.
- Отслеживание процесса выполнения задач на PHP [60] — Автор написал простенькую библиотеку, предназначенную для отслеживания прогресса выполнения больших по времени задач, например, пакетной обработке данных. Кроме времени библиотека позволяет отслеживать используемую память.
- Знакомимся с аспектно-ориентированным программированием в PHP [61]
— Некоторое время назад автор публиковал хабрапост об АОП на PHP [62]. На этот раз имеем более подробный и глубокий обзор концепций аспектно-ориентированного программирования. Примеры на PHP с использованием библиотеки Go! [63] прилагаются.
- PHP фреймворки на C [64] — В посте рассмотрены плюсы и минусы использования PHP фреймворков, поставляемых в виде расширений языка. Таких к слову автор насчитал два: Phalcon [65] и Yaf [66]. А есть ли другие?
Ссылка [67] на предыдущий выпуск.
Материал подготовил pronskiy [68]
Автор: alexzfort
Источник [69]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/29113
Ссылки в тексте:
[1] Optimizer+ будет включен в PHP 5.5: https://wiki.php.net/rfc/optimizerplus
[2] пакет стал доступен из PECL: http://pecl.php.net/package/ZendOptimizerPlus
[3] таких результатов: https://docs.google.com/spreadsheet/ccc?key=0Agw0hgqCxf0cdEZsdm1yNjd3amJReG05MzJYSF9USGc#gid=0
[4] Релиз PHP 5.5.0 Alpha6: http://php.net/index.php#id2013-03-07-1
[5] несколько: https://github.com/php/php-src/blob/php-5.5.0alpha6/NEWS
[6] Вышел в свет Symfony 2.2: http://habrahabr.ru/post/171251/
[7] посте: http://habrahabr.ru/post/171243/
[8] Первая бета Phalcon 1.0.0: http://habrahabr.ru/post/171915/
[9] 12й выпуск журнала Web & PHP: http://webandphp.com/issue-12
[10] О PHP-FIG: http://www.mwop.net/blog/2013-02-27-resigned-from-php-fig.html
[11] PHP-FIG: http://www.php-fig.org/
[12] Как на самом деле работает foreach: http://stackoverflow.com/questions/10057671/how-foreach-actually-works/14854568#14854568
[13] Следующая большая вещь в PHP: http://florinpatan.ro/2013/02/11/next-big-thing-in-php/
[14] RFC: https://wiki.php.net/rfc/site_voting_poll
[15] О предсказуемом цикле релизов PHP: http://pooteeweet.org/blog/0/2194
[16] Функциональное программирование на PHP: http://phpmaster.com/functional-programming-and-php/
[17] тема: http://habrahabr.ru/post/167181/
[18] Фильтр Блума на PHP: http://habrahabr.ru/post/170705/
[19] вероятностной структуры данных: http://ru.wikipedia.org/wiki/Фильтр_Блума
[20] Модульное тестирование на PHPUnit: http://jtreminio.com/2013/03/unit-testing-tutorial-introduction-to-phpunit/
[21] 2: http://jtreminio.com/2013/03/unit-testing-tutorial-part-2-assertions-writing-a-useful-test-and-dataprovider/
[22] 3: http://jtreminio.com/2013/03/unit-testing-tutorial-part-3-testing-protected-private-methods-coverage-reports-and-crap/
[23] 4: http://jtreminio.com/2013/03/unit-testing-tutorial-part-4-mock-objects-stub-methods-dependency-injection/
[24] Меры, которые следует предпринять если ваш PHP сайт оказался взломан: http://www.gregfreeman.org/2013/steps-to-take-when-you-know-your-php-site-has-been-hacked/
[25] предыдущем посте: http://www.gregfreeman.org/2013/how-to-tell-if-your-php-site-has-been-compromised/
[26] Интегрируем OAuth с помощью Opauth: http://phpmaster.com/integrating-open-authentication-using-opauth/
[27] Список: https://github.com/opauth/opauth/wiki/List-of-strategies
[28] Соблюдение стандартов PCI и PHP разработчики: http://phpmaster.com/pci-compliance-and-the-php-developer/
[29] Устанавливаем XHGui: http://www.lornajane.net/posts/2013/installing-xhgui
[30] тут: http://phpmaster.com/the-need-for-speed-profiling-with-xhprof-and-xhgui/
[31] Contributing to Paratest: http://css.dzone.com/articles/contributing-paratest
[32] Масштабирование приложений на Silex. Использование RouteCollection: http://gonzalo123.com/2013/03/04/scaling-silex-applications-part-ii-using-routecollection/
[33] предыдущей статьи о масштабировании Silex приложений: http://gonzalo123.com/2013/02/11/scaling-silex-applications/
[34] GitHub: https://github.com/gonzalo123/silexRouteCollection
[35] Behavior Driven Development: http://qafoo.com/blog/036_behavior_driven_development.html
[36] D значит документация: http://crisscott.com/2013/03/02/d-is-for-documentation/
[37] LUCID: http://crisscott.com/2012/09/11/lucid-development/
[38] Проблемы, эффективность и отношение группы PHP-FIG: http://ridinganelefant.tumblr.com/post/44223524737/php-figs-challenges-efficacy-and-attitude
[39] Создаем ePub с помощью PHP и Markdown: http://phpmaster.com/building-epub-with-php-and-markdown/
[40] md2epub: https://github.com/vtardia/md2epub
[41] RainTPL: http://www.raintpl.com/
[42] Valitron The Simple Validation Library That Doesn't Suck: http://www.vancelucas.com/blog/valitron-the-simple-validation-library-that-doesnt-suck/
[43] GitHub: https://github.com/vlucas/valitron
[44] Rock On, Refactor, or Re-roll?: http://unassumingphp.com/rock-on-refactor-or-re-roll/
[45] Сделаем конференции лучше: http://www.brandonsavage.net/making-conferences-better/
[46] Экспорт избранного Хабра в FB2 — скоростная PHP-версия: http://habrahabr.ru/post/170755/
[47] phpQuery: http://code.google.com/p/phpquery/
[48] Предотвращаем ухудшение кода со временем с помощью модульного тестирования: http://phpmaster.com/preventing-code-rot-101-unit-testing/
[49] «гниение кода»: http://en.wikipedia.org/wiki/Software_rot
[50] Полное руководство по командам в Laravel: http://net.tutsplus.com/tutorials/php/your-one-stop-guide-to-laravel-commands/
[51] Почему не следует использовать .htaccess (AllowOverride All): http://www.eschrade.com/page/why-you-should-not-use-htaccess-allowoverride-all-in-production/
[52] Почему FastCGI с Nginx настолько быстрее Apache с mod_php?: http://www.eschrade.com/page/why-is-fastcgi-w-nginx-so-much-faster-than-apache-w-mod_php/
[53] пример конфигурации httpd.conf для Magento: http://www.eschrade.com/page/no-htaccess-httpd-conf-file-for-magento/
[54] RESTful APIs на ZF2, Часть 3: http://www.mwop.net/blog/2013-02-25-restful-apis-with-zf2-part-3.html
[55] Перегрузка: создаем методы класса на лету: http://unassumingphp.com/overloading-create-methods-on-the-fly/
[56] Confoo: тестирование, производительность, метрики и API: http://qafoo.com/blog/035_confoo_testing_performance_metrics_apis.html
[57] Confoo: http://confoo.ca
[58] PHP достиг своего предела: http://sloblog.io/~zynisch/qI3DyGJd0yo/php-has-reached-its-limit
[59] Качество кода: http://itarato.blogspot.com/2013/03/code-quality.html
[60] Отслеживание процесса выполнения задач на PHP: http://itarato.blogspot.com/2013/02/progress-tracker-in-php.html
[61] Знакомимся с аспектно-ориентированным программированием в PHP: http://habrahabr.ru/post/170021/
[62] хабрапост об АОП на PHP: http://habrahabr.ru/post/165329/
[63] Go!: http://go.aopphp.com/
[64] PHP фреймворки на C: http://foaa.de/blog/2013/02/21/c-based-frameworks-for-php/
[65] Phalcon: http://phalconphp.com/
[66] Yaf: http://www.yafdev.com/
[67] Ссылка: http://habrahabr.ru/company/zfort/blog/170669/
[68] pronskiy: http://habrahabr.ru/users/pronskiy/
[69] Источник: http://habrahabr.ru/post/172297/
Нажмите здесь для печати.