Статьи и видео об объектно-ориентированном программировании в 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 (правда немного в другой очерёдности), вот первая десятка:
- PHPUnit
- Laravel
- Symfony
- Codeigniter (два разных пакета)
- Zend Framework
- Illuminate Support — компонент Laravel
- Guzzle
- CakePHP
- Composer
- 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 решает эту проблему! Этот подход пришел к нам из мира функционального программирования и состоит из нескольких простых шагов:
- генерируем случайные значения на вход
- вызываем тестируемый метод для каждого сгенерированного примера
- проверяем свойства получившегося результата, а не сам результат
- опционально: если свойства оказались не такими, как ожидалось, пытаемся найти минимальный пример входных данных на которых тест валится
Для примера, вот как будет выглядеть тест функции sort (которую мы, конечно, в реальной жизни сами не будем писать и не будем тестировать).
Сначала сгенерируем массив из 100 случайных натуральных чисел. Применим к массиву функцию sort. В конце с помощью обычного цикла переберём все элементы результата и проверим, что каждый следующий элемент массива не меньше предыдущего — это и есть проверка свойства, а не конкретных значений. Но не единственное свойство, которое стоит проверить. Также обратим внимание на то, что каждый элемент их входного массива должен быть и в выходном и наоборот — каждый элемент выходного массива должен быть и во входном. Длины обоих массивов должна совпадать.
Ещё один пример из статьи тестирует стандартный для PHP класс DateTime. На вход подаются все дни от 2000 до 2020 года и проверяется свойство, что разница между двумя любыми датами в секундах равна разнице в днях умноженной на 86400 (это число секунда в дне). В итоге был найден уже известный баг, который, кстати, всё ещё открыт!
Обратите внимание на готовую библиотеку для Property Based Testing под PHPUnit: Eris — порт аналогичной библиотеки QuickCheck из мира Haskell.
В ожидании PHP 7, даю ссылку на docker контейнер с альфа версией — разработчикам очень нужны наши баг-репорты!
Есть и другой способ помочь в развитии проекта — написание документации. В PHP сейчас 176 не задокументированных функций (в основном в расширениях). Предлагаю вам статью с подробным описанием процесса: как скачать репозиторий с документацией, как правильно оформить свой текст и как отправить обратно.
Под конец немного юмора с форума поддержки разработчиков 1С Битрикс: ставьте мемкеш, но быстрее не будет.
Источник: 5minphp.ru