Выпуск №8

Статьи и видео об объектно-ориентированном программировании в PHP (learning-oop-in-php), отдельно про Chain of responsibility, Requests — скромный HTTP клиент, PHPPackages.org и рейтинг пакетов, DuckDuckGo поиск по packagist, закончился основной период поддержки PHP 5.5, Hack в PhpStorm не будет, Nuclide IDE, PHP-VCR, Property Based Testing (Eris и QuickCheck), как контрибьютить в документацию, 1С Битрикс и memcache.

Всем привет!

Вы слушаете «Пятиминутку PHP», выпуск номер 8 — еженедельный подкаст о новостях из мира PHP, интересных постах в блогах и современных подходах к разработке.

Начну с обучающего материала, который будет полезен и новичку и профессионалу. В четвёртом выпуске подкаста я рассказывал про репозиторий на GitHub: DesignPatternsPHP — сборник паттернов проектирования с примерами на PHP. Продолжая эту тему рекомендую к изучению репозиторий learning-oop-in-php. Коллекция ссылок на статьи и видео об объектно-ориентированном программировании в PHP, о принципах SOLID, KISS, DRY и других интересных штуках. Ссылок действительно много и на любой вкус, посмотрите.

Также подкину ссылку на отдельную статью о паттерне Chain of responsibility в PHP.

Библиотека с говорящим названием Requests — скромный HTTP клиент, упрощающий взаимодействие с другими сайтами и берущий на себя все заботы — как гласит описание. Устанавливается через composer, использует PSR-0, покрыта тестами на 90%, простой и удобный интерфейс, в качестве транспорта использует cURL или fosckopen, требует PHP 5.2.
Но зачем Requests, если есть Guzzle? Ответ на этот вопрос даёт непосредственно документация. Во-первых, Requests ориентирован на максимальную совместимость со старыми версиями PHP и требует всего лишь PHP 5.2. Во-вторых, Guzzle — это не просто HTTP клиент, это монстр! А одной из целей библиотеки Requests является легковесность. Если вас вас убедили эти аргументы, пробуйте.

Сайт PHPPackages.org поможет найти подходящий composer пакет. Все мы знаем о центральном репозитории composer пакетов packagist.org, но у него есть проблема: очень много пакетов и не понятно как выбрать лучший? PHPPackages.org содержит список всех пактов с packagist и присваивает им рейтинг по хитрой формуле: 0.5 * average daily downloads + stars + 0.5 * forks + 2 * referenced by (половина среднего числа скачиваний в день, плюс число звёзд на GitHub, плюс половина числа форков, плюс двойное число проектов, которые зависят от данного). Что ещё удобно, зайдя в конкретный проект, например monolog, можно посмотреть список всех проектов, которые требуют monolog в качестве зависимости.

Возвращаясь к формуле рейтинга, самыми популярными пакетами являются всё те же, что и самые звёздные на GitHub (правда немного в другой очерёдности), вот первая десятка:

  1. PHPUnit
  2. Laravel
  3. Symfony
  4. Codeigniter (два разных пакета)
  5. Zend Framework
  6. Illuminate Support — компонент Laravel
  7. Guzzle
  8. CakePHP
  9. Composer
  10. Yii 2

Широко известный в узких кругах поисковик DuckDuckGo имеет систему расширений, позволяющую разработчикам написать собственный алгоритм выдачи подсказок. И кто-то уже написал расширение для поиска composer пакетов! Для этого в начале запроса нужно написать packagist, ищет по названию пакета, по организации и по описанию. Ничего сверхъестественного, но если вы постоянный пользователь DuckDuckGo, то может пригодиться.

20 июня 2015 закончился основной период поддержки PHP 5.5, но ещё одна версия с исправлениями багов (5.5.27) всё-таки выйдет 9 июля. Дальше, до 20 июня 2016 года, будут выходить только исправления безопасности. Таким образом, единственной активно-поддерживаемой версией PHP (т.е. с исправлениями багов) на сегодняшний день является PHP 5.6, основной период поддержки которой закончится 28 августа 2016 года. А дальше только PHP 7, только хардкор!

От поддержки PHP плавно переходим к поддержке языка Hack в PhpStorm, которой не будет, не смотря на то, что это один из самых популярных фич-реквестов в баг-трекере PhpStorm. И это нормально. Я не видел ни одного живого человека пишущего на Hack в production, не смотря на весь хайп (кроме разработчиков Facebook, конечно, хотя этих ребят я в живую тоже не видел). Кстати, команда из Facebook уже выпустила свой редактор с поддержкой Hack — Nuclide.

PHP-VCR — интересный проект из области тестирования PHP проектов работающих с внешним API. Эта штука сначала записывает ваши HTTP запросы, а потом вы можете воспроизвести их в тестах. Это позволяет тестировать код против удалённого API даже на ноутбуке в offline. Есть интеграция с PHPUnit.

Ещё немного о тестировании: статья о Property Based Testing в PHP. Одна из проблем с классическим тестированием в том, что приходится вручную задавать входные и выходные значения для проверки. Property Based Testing решает эту проблему! Этот подход пришел к нам из мира функционального программирования и состоит из нескольких простых шагов:

  1. генерируем случайные значения на вход
  2. вызываем тестируемый метод для каждого сгенерированного примера
  3. проверяем свойства получившегося результата, а не сам результат
  4. опционально: если свойства оказались не такими, как ожидалось, пытаемся найти минимальный пример входных данных на которых тест валится

Для примера, вот как будет выглядеть тест функции sort (которую мы, конечно, в реальной жизни сами не будем писать и не будем тестировать).
Сначала сгенерируем массив из 100 случайных натуральных чисел. Применим к массиву функцию sort. В конце с помощью обычного цикла переберём все элементы результата и проверим, что каждый следующий элемент массива не меньше предыдущего — это и есть проверка свойства, а не конкретных значений. Но не единственное свойство, которое стоит проверить. Также обратим внимание на то, что каждый элемент их входного массива должен быть и в выходном и наоборот — каждый элемент выходного массива должен быть и во входном. Длины обоих массивов должна совпадать.

Ещё один пример из статьи тестирует стандартный для PHP класс DateTime. На вход подаются все дни от 2000 до 2020 года и проверяется свойство, что разница между двумя любыми датами в секундах равна разнице в днях умноженной на 86400 (это число секунда в дне). В итоге был найден уже известный баг, который, кстати, всё ещё открыт!

Обратите внимание на готовую библиотеку для Property Based Testing под PHPUnit: Eris — порт аналогичной библиотеки QuickCheck из мира Haskell.

В ожидании PHP 7, даю ссылку на docker контейнер с альфа версией — разработчикам очень нужны наши баг-репорты!

Есть и другой способ помочь в развитии проекта — написание документации. В PHP сейчас 176 не задокументированных функций (в основном в расширениях). Предлагаю вам статью с подробным описанием процесса: как скачать репозиторий с документацией, как правильно оформить свой текст и как отправить обратно.

Под конец немного юмора с форума поддержки разработчиков 1С Битрикс: ставьте мемкеш, но быстрее не будет.

Источник: 5minphp.ru

 

5 минутка PHP

Подкаст о PHP, DBA, архитектуре, DevOps. Авторское мнение о современных трендах в веб-разработке и интересные беседы с гостями. Помимо PHP поднимаем темы про инфраструктуру, администрирование Linux и DevOps подходы, сравниваем PHP с другими языками программирования, например с Go, Rust и даже Erlang.

Добавить комментарий

%d такие блоггеры, как: