Дайджест интересных новостей и материалов из мира PHP за последние две недели №12 (25.02.2013 — 11.03.2013)



    Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.

    Приятного чтения!


    Новости и релизы


    • Optimizer+ будет включен в PHP 5.5 — За последние две недели произошел целый ряд событий, связанных с включением Zend Optimizer+ в PHP. Было запущено голосование, которое, напомним, предполагало 3 варианта развития событий: 1) Включить в 5.5, даже если это немного задержит релиз; 2) Если для интеграции необходимо задержать релиз 5.5, то включить в 5.6; 3) Не включать в PHP, предоставить только из PECL. Сначала пакет стал доступен из PECL, а затем по результатам голосования Зеевом Сураски в php-internals было оглашено решение о включении Optimizer+ в качестве zend_extension в дефолтной поставке PHP, а в версии 5.6 планируется уже интегрировать в ядро. Данное сообщение породило массу обсуждений, так как некоторые считают, что такое решение требует 2/3 на голосовании. Но все-таки включение оптимайзера никак не отражается на синтаксисе языка, да и по умолчанию соответствующая опция в php.ini, вероятно, будет установлена в Off. Ну что ж, покойся с миром предсказуемый релиз-процесс PHP: еще одна альфа, а бета вновь откладывается. Но ради таких результатов хотелось бы получить кэширование опкода из коробки на год раньше.
    • Релиз PHP 5.5.0 Alpha6 — Сам по себе релиз содержит всего несколько исправлений ошибок, найденных в предыдущей альфе, но примечателен тем, что служит для отсрочки релиза беты, в которую уже будет включен Optimizer+.
    • Вышел в свет Symfony 2.2 — Долгожданный релиз работа, над которым велась 6 месяцев. Подробнее о новых возможностях в посте .
    • Первая бета Phalcon 1.0.0 — Спустя год после появления на свет этот необычный PHP фреймворк дожил до первой версии.
    • 12й выпуск журнала Web & PHP — В юбилейном выпуске (журнал выходит уже год) раскрыты следующие темы: использование рекурсии в PHP; использование PECL; исправление ошибок в продакшене с помощью APM и многие другие.
    • О PHP-FIG — Matthew Weier O'Phinney, архитектор и лидер проекта Zend Framework, заявил о том, что покидает PHP-FIG, группу принимающую стандарты PSR. В посте, он приводит причины, которые заставили принять его такое решение. Вкратце, есть более важные вещи, на которые автор хотел бы тратить время чем споры о том, что использовать табуляцию или пробелы, где ставить фигурные скобки и т.п.


    PHP


    • Как на самом деле работает foreach — Самый подробный ответ на StackOverflow, который вы могли встретить. Core PHP разработчик Никита Попов расставляет все точки над работой цикла foreach.
    • Следующая большая вещь в PHP — Описав свое видение текущего состояния дел в PHP, авторы поста утверждают, что если все будет продолжаться в таком же духе, то PHP скоро умрет. Да, проживет 5, может быть 10 лет и умрет. По их мнению, чтобы не допустить этого PHP 6 должен вносить кардинальные изменения, направленные на производительность, а об обратной совместимости вообще призывают забыть. Кроме таких радикальных заявлений, авторы вносят действительно важное предложение: создать возможность обычным PHP-пользователям участвовать в развитии языка. Одним из авторов даже создан соответствующий RFC, в котором предложено добавить на php.net открытые голосования с тем, чтобы получить обратную связь от пользователей.
    • О предсказуемом цикле релизов PHP — Небольшой пост, в котором автор в связи с недавними новостями об Optimizer+ высказывает мнение о том, что стабильный и предсказуемый процесс релизов очень важен для разработчиков. А поспешное включение ZO+ в язык в виде zend_extension ничего по сути не дает: на shared хостингах его не будет и через год, а те, кто имеют возможность использовать последние версии PHP на сервере, могут просто поставить Optimizer+ из PECL.

    Материалы для обучения


    • Функциональное программирование на PHP — Совсем недавно тема уже проскакивала в дайджесте и, тем не менее, хороший пост, в котором раскрыты базовые принципы функционального программирования и их применение в PHP.
    • Фильтр Блума на PHP — PHP реализация вероятностной структуры данных, позволяющей компактно хранить множество элементов и проверять принадлежность заданного элемента к множеству. Например, автор применяет фильтр, чтобы проверить существование слова или фразы в словаре >10000000 слов.
    • Модульное тестирование на PHPUnit, 2, 3, 4 — Совершенно полное руководство по модульному тестированию для начинающих, в котором в четырех частях рассмотрены все аспекты использования PHPUnit, начиная с установки и заканчивая продвинутыми техниками использования.
    • Меры, которые следует предпринять если ваш PHP сайт оказался взломан — Если в предыдущем посте автор рассматривал диагностику: как узнать, что ваш сайт был взломан, то на этот раз рассмотрено «лечение»: перечислены шаги, которые помогут избавиться от зловредного кода. Кроме того приведены рекомендации по предотвращению повторного взлома и заражения.
    • Интегрируем OAuth с помощью Opauth — Небольшой туториал по использованию мульти-провайдерного фреймворка для аутентификации через OAuth в PHP приложениях. В посте рассмотрен пример интеграции с CodeIgniter, но существуют реализации для всех популярных фреймворков. Список поддерживаемых из коробки провайдеров внушителен.
    • Соблюдение стандартов PCI и PHP разработчики — В статье коротко рассказано о том, что же такое PCI стандарты, рассмотрены основные мифы их окружающие, а также дан обзор основных моментов. Более подробно автор останавливается на пунктах, непосредственно связанных с бэкенд разработкой веб-приложений.
    • Устанавливаем XHGui — Небольшой туториал по установке и использованию отличного инструмента для профилирования кода. Чуть более подробный туториал уже был тут.
    • Contributing to Paratest — Небольшая статья, в которой автор рассказывает преимущества использования инструмента Paratest для параллельного выполнения тестов, а также рассказывает о новых улучшениях, которые были предложены сторонними разработчиками и призывает всячески помогать и участвовать в развитии проекта.
    • Масштабирование приложений на Silex. Использование RouteCollection — В этом посте автор улучшает свой пример приложения из предыдущей статьи о масштабировании Silex приложений, и на этот раз использует RouteCollection для определения маршрутов вместо контейнера DI из Symfony. Весь код доступен на GitHub.
    • Behavior Driven Development — Небольшой обзор концепции BDD в общем и Behat в частности.
    • D значит документация — В посте автор рассматривает последний принцип из набора LUCID — документирование. По аналогии с TDD, автор предлагает свой подход к программированию — Documentation Driven Development. Такой подход предполагает, что разработчик сначала пишет документацию и комментарии к коду, затем тесты, а уж после всего приступает непосредственно к коду. В посте также приведен небольшой пример, иллюстрирующий данный поход (без тестов).
    • Проблемы, эффективность и отношение группы PHP-FIG — Новость о том, что одна из ключевых фигур покидает PHP-FIG, безусловно, имела резонанс. Автор поста хоть и не является членом PHP-FIG, тем не менее, излагает дельные соображения по поводу дальнейшей судьбы группы. Кроме самого поста, рекомендуем обратить внимание на комментарии, где так же изложены интересные мысли по теме.
    • Создаем ePub с помощью PHP и Markdown — Хороший туториал, в котором показано, как из Markdown-документов создать ePub-книгу с помощью библиотек md2epub и RainTPL.
    • Valitron The Simple Validation Library That Doesn't Suck — Автор попытался найти простую и удобную библиотеку для валидации данных пользователя, которая не была бы громоздкой и не имела зависимостей. Не найдя такую, автор написал свою библиотеку Valitron, обладающую всеми перечисленными особенностями. Больше примеров использования можно найти на GitHub.
    • Rock On, Refactor, or Re-roll? — Наверняка вы встречались с ситуацией, когда разрабатывая что-нибудь для себя вам вдруг по каким-либо причинам приходится отложить разработку на некоторое время, а вернувшись к делу вы обнаруживаете, что на многие участки кода смотрите иначе и хотели бы сделать по-другому/лучше. В этом случае перед вами стоит выбор: продолжить начатое, рефакторить или переписать все с нуля. Как раз о таких ситуациях данный пост. Автор описывает свой опыт и дает рекомендации по принятию решения.
    • Сделаем конференции лучше — Автор поста любит PHP-конференции и часто выступает с докладами на самых разных из них. В посте же он делится несколькими идеями о том, как сделать конференции более полезными, а значит более интересными для широкого круга разработчиков.
    • Экспорт избранного Хабра в FB2 — скоростная PHP-версия — Автор поста создал полезное приложение на PHP для создания книги из ваших избранных постов. Для разбора статей была использована библиотека phpQuery.
    • Предотвращаем ухудшение кода со временем с помощью модульного тестирования — В статье идет речь о том, что такое «гниение кода». Конечно же, сам код с течением времени не меняется, но окружение может измениться сильно, а это может привести к непредсказуемым результатам. Авторы приводят ряд рекомендаций и примеров по тестированию кода, для того чтобы избежать подобного.
    • Полное руководство по командам в Laravel — Большой и подробный туториал по Artisan — утилитам командной строки в Laravel и написанию пользовательских команд.
    • Почему не следует использовать .htaccess (AllowOverride All) — в продакшене Автор уже публиковал в своем блоге результаты небольшого исследования Почему FastCGI с Nginx настолько быстрее Apache с mod_php?, в котором обнаружил что узким местом при использовании Apache является директива AllowOverride All. На этот раз автор опубликовал чуть более подробное исследование, а также привел пример конфигурации httpd.conf для Magento.
    • RESTful APIs на ZF2, Часть 3 — Продолжение серии статей о построении RESTful интерфейсов. Автор продолжает описывать общие концепции REST, и на этот раз касается документирования вашего API.
    • Перегрузка: создаем методы класса на лету — В большинстве языков программирования перегрузка означает возможность описания нескольких методов с одним именем и различным числом аргументов. Перегрузка в PHP означает возможность динамически «создавать» свойства и методы. В своем посте автор на примере показывает использование «перегрузки». Описан класс доступа к базе данных и получение записей с помощью методов getBy (например, по id или username — getById() и getByUsername() соответственно) реализованных через «волшебный» __call().
    • Confoo: тестирование, производительность, метрики и API — Слайды нескольких полезных докладов с прошедшей в Монреале конференции Confoo.
    • PHP достиг своего предела — Автор перешел с PHP на Ruby, а в посте сравнивает решения типичных задач на Rails и TYPO3, естественно демонстрируя превосходство первого. Может, хватит уже?
    • Качество кода — Автор считает, что качество кода — это всего лишь 30% таланта и 70% правильной настройки окружения и процессов. В посте автор описывает те инструменты и методики, которыми пользуется сам для поддержания желаемого качества.
    • Отслеживание процесса выполнения задач на PHP — Автор написал простенькую библиотеку, предназначенную для отслеживания прогресса выполнения больших по времени задач, например, пакетной обработке данных. Кроме времени библиотека позволяет отслеживать используемую память.
    • Знакомимся с аспектно-ориентированным программированием в PHP — Некоторое время назад автор публиковал хабрапост об АОП на PHP. На этот раз имеем более подробный и глубокий обзор концепций аспектно-ориентированного программирования. Примеры на PHP с использованием библиотеки Go! прилагаются.
    • PHP фреймворки на C — В посте рассмотрены плюсы и минусы использования PHP фреймворков, поставляемых в виде расширений языка. Таких к слову автор насчитал два: Phalcon и Yaf. А есть ли другие?


    Ссылка на предыдущий выпуск.
    Материал подготовил pronskiy

    Zfort Group
    113,00
    Компания
    Поделиться публикацией

    Комментарии 43

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


        С обратной совместимостью согласен отчасти (все нынешние библиотеки объявить как depricated в 5.6, а в 6 убрать). Но вот с производительностью — только если имеется в виду прежде всего производительность программиста, изменения синтаксиса, направленные на это. А если направленная на увеличение rpm ценой отказа от BC, без улучшения простоты кода — на фиг надо. Вон HipHop есть, Phalcon и Yaf.
          +1
          Чтобы ими воспользоваться, надо свое приложение писать конкретно под них. Банально — в PHP нет возможности организовывать постоянные соединения… Да, я знаю, что есть костыли на эту тему, но они — костыли. А прогресс движется вперед, и скоро постоянные соединения станут такими же обыденными, как аякс в свое время.

          Если бы PHP без ущерба синтаксису (ну… с маленькими доработками бардака в именованиях функций) стал чем-то вроде NodePHP, он бы от этого только выиграл.
            +1
            Если бы PHP без ущерба синтаксису (ну… с маленькими доработками бардака в именованиях функций) стал чем-то вроде NodePHP, он бы от этого только выиграл.


            Вряд ли. Постоянные соединения не являются развитием tcp или http-протокола. Это просто еще один способ их использования для специфических задач. А PHP и так уже слишком универсален (за что тоже приходится платить) и если туда сейчас еще «привсовывать» разных фишечек — то думаю новых версий мы вообще никогда не увидим :-).
              0
              PHP — это платформа для разработки веб-приложений. Я уж не буду рассматривать какие-нибудь phpQT или что там есть, сомневаюсь, что на них кто-то что-то путное написал. И поэтому PHP, наверное, надо рассматривать как средство решения узко специализированных задач.

              А в веб-разработке все чаще и чаще используются те же вебсокеты. Просто потому, что в веб уходит куча инструментов для решения повседневных задач. И я считаю, что необходимость в поддержке таких вещей надо рассматривать именно с позиции востребованности их в этой узко специализированных задач. А они там, повторю, все нужнее и нужнее.
                +1
                PHP — это платформа для разработки веб-приложений. Я уж не буду рассматривать какие-нибудь phpQT или что там есть, сомневаюсь, что на них кто-то что-то путное написал. И поэтому PHP, наверное, надо рассматривать как средство решения узко специализированных задач.

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


                Не понимаю, что вы хотите оставить от PHP?

                Websocket это в первую очередь — работающий на порту сервер. PHP всегда стоит за http-сервером.
                В основе асинхронных систем — события. PHP решает задачу от начала запроса и до конца практически без сохранения состояния (да есть сессии, но убогие).
                PHP гораздо более приспособлен для работы со строками и массивами нежели с объектами.
                  +1
                  Не всегда PHP стоит за http-сервером. CLI — один из стандартных способов его запуска. Сокеты — в стандартной либе, средства IPC тоже есть. Плохо в PHP с потоками, плюс отсутствие более высокоуровневых стандартных средств для организации хотя бы многопроцессного сервера. Ну и молва, что PHP-приложение в режиме демона или просто сколь-нибудь долгой работы просто обязано течь.
                    +3
                    Я вот могу глубоко-приглубоко заблуждаться, но php, лично для меня — это си-подобный серверный ЯП. Соответсвенно он должен решать серверные задачи. Вы сами же говорили двигаться вперед и не оглядываться на «мамонтов», так почему же если стек веб-технологий развился от http до ws — не развивать так же и это в php? Да, php-программистам прийдется познакомиться с событиями, хотя уверен что большинство о событиях знают из js, или фреймворков, в которых они имитируются.
                    Про строки, массивы vs объекты — вообще не понял.
        • НЛО прилетело и опубликовало эту надпись здесь
            +1
            PHP 5.2 мало где стоит? Есть свежая статистика по этому поводу? Вроде как раз встречалась обратная инфа, что он один из самых популярных до сих пор. В том, числе и благодаря тому, что Zend сделали новый Guard несовместимый со старыми версиями, ну и конечно куча E_DEPRECATED сообщений.
            • НЛО прилетело и опубликовало эту надпись здесь
                +1
                То что он выпилен из популярных репов, ничего не говорит о реальном использовании в инете, на реальных сайтах. Одно дело когда новый сайт делают, то да можно поставить самый свежий софт и под него всё настроить. Другое дело когда у хостеров сотни сайтов, скрипты которых не обновлялись лет 5-7.
              0
              На хостингах часто можно переключать версии php. Если у вас vds то вообще проблем нет. Я думаю, что если будет такое обновление хостинги, ранее не поддерживающие возможность переключения версий — сделают ее.
                0
                Ставить продукт там где есть 5.2 или ставить себе 5.2 на VDS. Можно сказать новая ниша рынка.
                  +2
                  Вы явно сильно преувеличиваете.
                  PHP Точно умрет, если не перестанут обратные совместимости нарушать. По крайней мере, разрабы продуктов на него забьют и админы.


                  Абсолютно не согласен. PHP в первую очередь уникален и удобен своей мощью из коробки — тем, что он не просто язык, а уже часть вашей системы. Например для домашних страничек и PHPонеров — это 95% всей системы. Для CMS — 70%. Для сложных приложений — 50% (с расширениями, фреймворками и оптимизаторами). Для highload — это и правда только скриптовый язык, причем один из худших именно из-за обратной совместимости.

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

                  Какие функции лично у вас вызвали затруднения с депрекейтами (ereg*, split ?).
                    +2
                    Кстати, да. Почему-то к PHP очень избирательно относятся. То как скриптовый язык общего назначения его с другими сравнивают, то как фреймворк, смотря с какой позиции его лучше опустить, забывая, что он скорее относится к разряду микрофреймворков.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        +2
                        Да не у меня, а у клиентов. Я админ. Клиенты часто просят ставить софт, который не работает под пхп 5.3, а уж под 5.4 и подавно.

                        5.2 задепрекейчен везде. Такие приходится костыли воротить порой…


                        Может быть вся проблема в том, что вы админ? Все таки странно пытаться доработать приложения под новые версии ПО системному администратору.

                        Т.е. представьте, что вы взялись внедрить Windows 98 с поддержкой 64 бит…

                        И еще раз спрашиваю о каких deprecated вы говорите? А вот вспомнил еще один популярный — передача объектов по ссылке (решается убиранием & в присвоении, split тупо заменяется на explode, ereg* в большинстве случаев на preg).
                          +1
                          Чтобы менять split на explode, нужно хоть немного разбираться в PHP. Для клиентов же ситуация выглядит так, всё работало, хостер обновил PHP — на сайте начали выпадать ошибки. Потом у службы поддержки плавятся телефоны от звонков, и они быстро откатывают версию PHP обратно.
                            +1
                            Чтобы менять split на explode, нужно хоть немного разбираться в PHP. Для клиентов же ситуация выглядит так, всё работало, хостер обновил PHP — на сайте начали выпадать ошибки. Потом у службы поддержки плавятся телефоны от звонков, и они быстро откатывают версию PHP обратно.


                            Странные у вас хостеры. Я с такими не сталкивался. От таких лучше бежать без оглядки. А если они Apache на Nginx сменят и вы без htaccess останетесь тоже PHP будет виноват?)
                              0
                              Вполне обычные хостеры, они обычно просто предлагают клиенту разные версии PHP. А в остальном работают по принципу работает — не трогай. Или думаете хостеры будут еще клиентам скрипты править, чтобы они работали?
                                0
                                Вполне обычные хостеры, они обычно просто предлагают клиенту разные версии PHP.


                                хостер обновил PHP
                          +1
                          клиенты хотят заплатить денег только админу

                          тогда ставьте php 5.2 — в чем проблема-то?
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Есть такая вещь в бизнесе — разделение ответственности. Ваша задача, как специалиста, грамотно объяснить клиенту все плюсы и минусы предлагаемых вариантов — рассказать про безопасность именно данного продукта (как написанного с использованием PHP 5.2).

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

                              После этого клиент либо откажется, либо уже не сможет в будущем переложить всю ответственность за проблемы на вас.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  +2
                                  Понимаете, в чем беда… Я довольно часто сам являюсь и админом и клиентом =) Вот такая вот шизофрения, да.


                                  Ну тогда грех жаловаться :-) Сами выбираете не поддерживаемые продукты — сидите, переписывайте, учитесь. Напишите универсальный апдейтер с PHP 5.2 до PHP 5.4 (с заменой функций и т.д.). Денег заработаете :-).
                                    0
                                    а можно какой-нибудь реальный пример?

                                    Что за мега продукт, который не развивается и не имеет конкурентов?
                                    • НЛО прилетело и опубликовало эту надпись здесь
                          +1
                          У нас сейчас большая часть проектов на 5.2. Встречается 5.1 и кое-что до сих пор тихонько пашет на 4ке.
                          +1
                          Как вообще optimizerplus по стабильности, на живых проектах уже используют? Бояздно пока ставить, слишком много свежих коммитов… =) в том числе:
                          >> 5 days ago fixed memory leaks [dstogov]
                            0
                            мне кажется на production рановато ставить
                              0
                              В составе Zend Server уж несколько лет как работает, практически без проблем на production(была парочка segfault но скорее изза кривого железа в hetzner).
                                0
                                я заметил проблемы с симфониевской консолью с версией с одной из февральских версий.
                                Возможно есть проблемы только в консольных приложения.

                                А разве в Zend Server используется Zend Optimizer+?
                                  0
                                  Опкод кэшеры в CLI режиме не работают, им негде хранить промежуточный байткод и кеш, смысл их использовать в CLI пропадает. Включаются только в mod_apache или fastcgi.

                                  Конечно используется, вместе с кучей других полезных компонентов. В последнем ZS (6.0) вообще все красиво, он поставляется в виде платформы для развертывания кластера.
                                    0
                                    если в консольных приложениях кэширование опкода не работает, тогда чего нужна директива zend_optimizerplus.enable_cli?
                                      0
                                      Оно работает, в рамках одного процесса, тобишь никакой выгоды не дает. Флаг этот экспериментальный, оставлен для тестеров с CLI приблудами для тестирования в условиях максимально приближенных к боевым.
                            –1
                            К слову о MVC фреймворках скомпилированных как extension. Я вот уже 6 месяцев слежу за развитием Phalcon и даже сделал немало приложений на нем.

                            Аргумент, что Вам необходимо знать С/С++ говорит лишь о некомпетентности. Неужели Вы всегда лезете в core от Zend Framework или Symphony, чтобы что-то поправить? Тогда дайте мне номер телефона Вашего начальника, я сообщу ему, что он зря тратит деньги на Вас. Неужели Вы будете и дальше пихать костыли в следующие релизы? А не забудете ли, что сделали? Для Вас же придумали интерфейсы.

                            Аргумент, что у меня shared хостинг не катит. Раз приобрели shared, значит Вам и не нужно основное преимущество скомпилированного фреймворка — скорость. (Тут я могу быть в единичных случаях не прав, например мой регистратор по просьбе устанавливает расширения)

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

                              А есть тесты, сравнивающие чистый Phalcon с, например, ZF + APC?
                                0
                                Может и есть, но статья об этом была бы интересна ;)
                                0
                                >10000000 слов.

                                Не критично конечно, но было бы приятнее читать такие числа разбитыми на группы.
                                  +1
                                  PhpStorm 6 Released!

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое