И ещё вдогонку библиотечек на PHP.
axy/fs-paths: пути в ФС
Работа с путями к файлам. Разбор, нормализация, вычисление относительных и всё такое прочее.
Разные типы: Unix, Windows, UNC, даже URL’ы.
Любителям статики — статика, любителям объектов — объекты :)
Допустим, мы спарсили страничку по адресу http://example.com/news/view/?id=10
, а в ней ссылки.
Как узнать, куда они ведут?
use axy\fs\paths\Paths; $base = 'http://example.com/news/view/?id=10'; $links = [ './../archive/?page=5#10', '/profile/', 'http://site.loc/', ]; $urls = Paths::getAdapter(Paths::TYPE_URL); foreach ($links as $link) { echo $link.' --> '.$urls->resolve($base, $link).PHP_EOL; } |
Результат:
./../archive/?page=5#10 --> http://example.com/news/archive/?page=5#10 /profile/ --> http://example.com/profile/ http://site.loc/ --> http://site.loc/
axy/callbacks: колбэки
В дополнение к стандартному callable связывание аргументов:
$callback = new Callback(['obj', 'sum'], [1, 2]); $callback(3, 4); // $obj->sum(1, 2, 3, 4); |
Или так:
$callback = ['obj', 'sum', [1, 2]]; // ... Callback::call($callback); // $obj->sum(1, 2); |
И связывание контекста заодно:
class MyClass { public function getEventHandler() { return new Callback([$this, 'onEvent'], ['click'], true); } private function onEvent($event) { echo 'Event '.$event.'!'; } } $obj = new MyClass(); $handler = $obj->getEventHandler(); // click $handler(); // "Event click!". Private method was called |
axy/magic: магия
Работа с магическими свойствами: отложенное создание магических свойств, надстройки над массивами, read-only и всё такое прочее.
Всё в виде трейтов, комбинируется, как угодно.
axy/envnorm: нормализация окружения
При запуске приложения, обычно, нужно поколдовать с глобальными настройками и окружением:
— Перехватить все ошибки и предупреждения и выдавать вместо них нормальное исключение.
— Перехватить исключения на верхнем уровне.
— Выводить ошибки при разработке и отключить на продакшене.
— Настроить недонастроенное окружение: правильную кодировку, таймзону путь к сендмайлу и т.п.
Просто пишем нужный конфиг и выполняем вначале:
use axy\envnorm\Normalizer; $config = [ 'errors' => [ 'exceptionHandler' => 'myExceptionHandler', ], 'datetime' => [ 'timezone' => 'Europe/Moscow', ], ]; Normalizer::createInstance($config)->normalize(); |
Всё в composer’е, на гитхабе и с документацией на подобии инглиша.