gzhegow/support

Support libraries

1.6.21 2022-08-31 21:16 UTC

README

Библиотека вспомогательных функций

Хочу предупредить. На текущем этапе я не использую семантический контроль версий. Пожалуйста, если вы нашли библиотеку рабочей - фиксируйте конкретную версию в composer.json. Библиотека на текущий момент претерпевает изменения едва ли не каждую неделю. Она по большей части никому не нужна, поэтому я меняю её как хочу. Если она кому-то понравится - я готов перейти на семантическое обновление "один раз в месяц" для минорной и раз в 3 месяца для мажорной версии.

  • XArr.php
умеет делать с массивами то, что вы очень хотели, но его там не было.
обход в глубину с получением пути, получение значения по дот-нотации, превращение в список чего угодно, unique с сохранением ключей, улучшенный мерж ключей-значений и тд.
  • XCache.php
единый сервис для кешей Psr\CacheItemPool. Теперь банановый. Умеет в отложенную инициализацию и поддерживает возможность обернуть самого себя в качестве кеша.
  • XCalendar.php
умеет работать с датами так, чтобы от этого не плеваться.
Сравнивать, добавлять, превращать в дату инты и флоаты, парсить таймзону из текста, превращать иммутаблы в неиммутаблы и вообще умный.
  • XCli.php
умеет средствами OS удалять папку, создавать zip / tar.gz, умеет переспрашивать о том, что файл уже есть, работает с многострочным вводом и позволяет делать паузы в консоли с запросом нажатия Enter, чтобы пошагово работать с трейс-роутами
  • XCmp.php
умеет сравнивать приводя типы к нужным, работает в связке с XCriteria, примерно как делают php-функции strcasecmp и тд. По большей части нужен для удобной сортировки чего-угодно
  • XCriteria.php
умеет проверять массив с помощью критерия (в будущем доделаю возможность создавать критерий в виде запроса $query->where()->satisfy($array))
Создавался, чтобы строить умный фильтр на сайте, где требуется поиск, и потом объектом-фильтром передавать его в репозитории
  • XCurl.php
умеет клонировать curl ресурсы, задавать умолчания, и создавать новые при помощи $curl->get(url, data) вместо каких-то там опций и тд. А еще умеет в multicurl в одну строку, умеет делать walkMulti() обходя каждый результат и позволяя его повторить, если возникла ошибка, и да, сделает это в мульти, целой пачкой. В общем GuzzleHttp снова выбросить на помойку.
  • XDebug.php
умеет выводить в виде текста любой тип данных, работать с сообщениями и аргументами, генерировать аккуратный стек-трейс для лога
  • XEnv.php
простенький класс исправляющий ошибки getenv()/putenv() на разных окружениях, связанный с регистром символов
1) в Windows env считаются non-case-sensitive, хотя окружение Apache/Nginx может быть скомпилировано/настроено совершенно непредсказуемо, тогда как в Unix оно строго caseSensitive
2) Интересно, что getenv() работает как caseInsensitive в Windows, а вот putenv() почему-то - нет, то есть установив Path и PATH будет возвращен последний указанный, при этом замены не происходит, и они в массиве оба
3) функция getenv() имеет флажок $localOnly, который должен возвращать ENV на начало скрипта без учета изменений, выполненных в его процеессе. Но иногда она просто не работает
4) кастомные парсеры и загрузчики env из файла, такие как symfony/dotenv часто меняют суперглобальную $_ENV не затрагивая putenv(), поэтому нужна функция, которая проверит и там и там и она есть
5) позволяет получить разницу между переменными до скрипта и после, чтобы, например, вернуть как было
  • XFilter.php
класс, который проходится по всем другим в поисках функций ->filter<что-то>($var) и превращает их в три метода -> filter()/is()/assert()
Первый возвращает null или исходное, второй всегда bool, третий бросает исключение с указанным текстом или исключение по-умолчанию. Удобно, когда валидатора под рукой нет.
  • XFormat.php
форматирует размер файла в человеческий формат и обратно, умеет делать sqlLikeEscape, чистит комменты из кривого json, если сделать file_get_contents('data.js') и ещё кое-какие мелочи
  • XFs.php
работает с файловой системой, строит и соединяет пути, убеждается что они верные, гарантирует один разделитель между папками, умеет в мощный рекурсивный удалятель папки на генераторе, чтобы спрашивать "а надо удалять или не надо" и иметь возможность удалить папку рекурсивно, но частично.
  • XItertools.php
представляет основные функции комбинаторики range/inverse/product/permutations/combinations, работает с последовательностями и всегда возвращает генератор
реализации взяты из Python, а сами функции нужны когда речь заходит о битовых масках, сложных "если-то", "всех возможных пересечениях букв" и тд.
  • XLoader.php
работает с неймспейсами, удобно слепляет PSR-4 пути к папкам с неймспейсами ничего не теряя, позволяет считывать из PHP кода классы, трейты, интерфейсы, use, чтобы потом использовать генератор кода.
  • XLogger.php
единый сервис для кешей Psr\LoggerInterface. Теперь банановый. Умеет в отложенную инициализацию и поддерживает возможность обернуть самого себя в качестве логгера, а еще позволяет передавать в качестве сообщения любой тип данных (массив например) и аккуратно его выведет.
  • XMath.php
реализует несколько математических функций и почти всю bc() логику из PHP с тем условием, что преобразование из числа или другого объекта в строковое число производится один раз и далее работает с ValueObject, там ещё реализован функция-эквалайзер, когда нужно тянуть за один рычажок, и чтоб остальные равномерно перемещелись уступая часть суммы для того, что тянем
  • XNet.php
получает ip/useragent, содержит константы на HTTP методы и позволяет проверять айпишник в маске подсети. Когда-то был частью XCurl, потом положил отдельно
  • XNum.php
в основном позволяет фильтровать числа и делать из массива чисел списки по типам. например, если нужно разбить массив на инты и флоаты - две строки и флоаты там, а инты здесь, и вообще позволяет работать с числами удобнее, можно вернуть преобразованные к числу, а можно оставить в виде строки. осторожнее с плавающей точкой!
  • XPath.php
модуль работы с путями, контроллирующий число разделителей, слепляющий, разбивающий и позволяющий получать пути по аналогии dirname(file)/basename(file), только поддерживает любое число разделителей
исправить путь d:\hello/world.foo/bar\test/ в правильный или сделать это неймспейсом PSR4? да запросто.
  • XPhp.php
добавляет несколько полезных функций, таких как kwargs() из Python, overload() для перегрузки параметров и их порядка, позволяет проверять инстанс на соответствие "одного из классов" или проверять выходной тип методов-факторок
  • XProf.php
очень простой класс для удобного вывода затраченного на код времени, основан на microtime(true) просто делает это по категориям и одной строкой
  • XStr.php
класс реализующий два десятка недостающих в PHP строковых методов в том числе explode/implode recursive, join, untrim, crop, str_replace с поддержкой лимита и всю multibyte логику, кроме того умеет в slugify()/pluralize()/singularize() применяя доктрину или симфони за источник знаний (если те установлены), если нет - вежливо предложит установить, а не свалится в "файла нету" на этапе composer/autoload
  • XUri.php
класс работающий со ссылками и позволяющий их сравнивать по регулярке или по parse_url(), делать их абсолютными или относительными и вообще полезно, когда работаешь с SEO продвижением