PHPackages                             mt-cod/php-project-lvl2 - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. mt-cod/php-project-lvl2

ActiveLibrary

mt-cod/php-project-lvl2
=======================

hexlet php-package

v1.0.2(4y ago)023MITPHP

Since Mar 6Pushed 4y ago1 watchersCompare

[ Source](https://github.com/MT-cod/php-project-lvl2)[ Packagist](https://packagist.org/packages/mt-cod/php-project-lvl2)[ RSS](/packages/mt-cod-php-project-lvl2/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (10)Dependencies (5)Versions (14)Used By (0)

Учебный проект «Вычислитель отличий» в рамках курса Hexlet (PHP-разработчик)
----------------------------------------------------------------------------

[](#учебный-проект-вычислитель-отличий-в-рамках-курса-hexlet-php-разработчик)

[![Actions Status](https://github.com/MT-cod/php-project-lvl2/workflows/hexlet-check/badge.svg)](https://github.com/MT-cod/php-project-lvl2/actions)[![PHP%20CI](https://github.com/MT-cod/php-project-lvl2/workflows/PHP%20CI/badge.svg)](https://github.com/MT-cod/php-project-lvl2/actions)[![Latest Stable Version](https://camo.githubusercontent.com/aaf74ac9cf4102bf00bc41aa37666b872969edcd311d4a10a4f4b0f3e5c98b58/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d742d636f642f7068702d70726f6a6563742d6c766c322e737667)](https://packagist.org/packages/mt-cod/php-project-lvl2)
[![Code Climate](https://camo.githubusercontent.com/e6420ca56c17526e36d027287090e1fde34b90b1f931cf7320ca7762a86be58d/68747470733a2f2f636f6465636c696d6174652e636f6d2f6769746875622f4d542d636f642f7068702d70726f6a6563742d6c766c322f6261646765732f6770612e737667)](https://codeclimate.com/github/MT-cod/php-project-lvl2)[![Issue Count](https://camo.githubusercontent.com/ed0f82ab0782ab6bcaca8b1047d1958f2811e74ed9a76848a96efa24f31d5b1d/68747470733a2f2f636f6465636c696d6174652e636f6d2f6769746875622f4d542d636f642f7068702d70726f6a6563742d6c766c322f6261646765732f69737375655f636f756e742e737667)](https://codeclimate.com/github/MT-cod/php-project-lvl2/issues)[![Test Coverage](https://camo.githubusercontent.com/64c0b1bcf6921d0194a37706b7d59f103fac1c26c94bc284a0f00b4c61b6f62c/68747470733a2f2f636f6465636c696d6174652e636f6d2f6769746875622f4d542d636f642f7068702d70726f6a6563742d6c766c322f6261646765732f636f7665726167652e737667)](https://codeclimate.com/github/MT-cod/php-project-lvl2/coverage)

Цель
----

[](#цель)

Вычислитель отличий – проект, который, по-настоящему, прокачивает даже опытных разработчиков. Здесь пришлось столкнуться с принятием сложных архитектурных решений, автоматизированным тестированием и непрерывной интеграцией, функциональным программированием, работе с древовидными структурами данных и рекурсивными алгоритмами.

### Структуры данных и Алгоритмы

[](#структуры-данных-и-алгоритмы)

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

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

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

### Архитектура

[](#архитектура)

Для построения дифа между двумя структурами нужно проделать множество операций: Чтение файлов, парсинг входящих данных, построение дерева различий, формирование необходимого вывода.

Помимо внутренней архитектуры, в этом проекте появляется необходимость работать с параметрами командной строки. Происходит углубление понимание работы операционных систем в целом и командных интерпретаторов в частности. Для организации этой части кода используется популярная библиотека [docopt.php](https://github.com/docopt/docopt.php), архитектура которой, позволяет легко строить консольные утилиты.

### Тестирование и Отладка

[](#тестирование-и-отладка)

Автоматизированные тесты – неотъемлемая часть профессиональной разработки. Вычислитель отличий идеальный проект для прокачки навыка тестирования. Он достаточно простой и удобный для написания тестов и достаточно сложный для того, чтобы прочувствовать важность этих тестов во время рефакторинга и отладки.

Для написания тестов используется фреймворк [PHPUnit](https://phpunit.de/)

Описание
--------

[](#описание)

Вычислитель отличий – программа, определяющая разницу между двумя структурами данных. Это популярная задача, для решения которой существует множество онлайн-сервисов, например: . Подобный механизм используется при выводе тестов или при автоматическом отслеживании изменении в конфигурационных файлах.

Возможности утилиты:

- Поддержка разных входных форматов: yaml и json
- Генерация отчета в виде plain text, stylish и json

Пример использования:

```
# формат plain
$ gendiff --format plain path/to/file.yml another/path/file.json
Property 'common.follow' was added with value: false
Property 'group1.baz' was updated. From 'bas' to 'bars'
Property 'group2' was removed
# формат stylish
$ gendiff filepath1.json filepath2.json
{

follow: false
setting1: Value 1

setting2: 200
setting3: true

```

`setting3: {key: value}setting4: blah blah`- `setting5: {key5: value5}}`

### Аскинемы с примерами:

[](#аскинемы-с-примерами)

[Сравнение плоских файлов (JSON) - asciinema](https://asciinema.org/a/HwX4IjYjV6YhX6jvt9GvosWrD)
[Сравнение плоских файлов (yaml) - asciinema](https://asciinema.org/a/JY3Wz4d0U1FKWPs4edWREFnSg)
[Stylish формат - asciinema](https://asciinema.org/a/Kv81V5RZsYLDOpfzaL5TpCKn1)
[Плоский формат - asciinema](https://asciinema.org/a/o3W5gWcVmrGADGQFvkAxLykFG)
[Вывод в json - asciinema](https://asciinema.org/a/OS4XBf5ARzSuswo5BYOzQRCk7)

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~14 days

Recently: every ~36 days

Total

12

Last Release

1736d ago

Major Versions

v0.8 → v1.0.02021-03-28

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/79378982?v=4)[MT-cod](/maintainers/MT-cod)[@MT-cod](https://github.com/MT-cod)

---

Top Contributors

[![MT-cod](https://avatars.githubusercontent.com/u/79378982?v=4)](https://github.com/MT-cod "MT-cod (150 commits)")

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/mt-cod-php-project-lvl2/health.svg)

```
[![Health](https://phpackages.com/badges/mt-cod-php-project-lvl2/health.svg)](https://phpackages.com/packages/mt-cod-php-project-lvl2)
```

###  Alternatives

[neos/flow

Flow Application Framework

862.0M451](/packages/neos-flow)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
