Ещё библиотечки

И ещё вдогонку библиотечек на 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’е, на гитхабе и с документацией на подобии инглиша.

go\Pager

Решил собрать все маленькие дурацкие PHP-тулзы в одном месте: https://github.com/vasa-c/go-helpers.

И первым будет пагинатор.

Пример: https://blgo.ru/go/helpers/pager/.

Пагинируйте всё, что придёт в голову, не отрываясь от подушки!

goDB 1.1.3

После года разгильдяйничества, решил снова заняться своей библиотечкой для работы с MySQL.

Изменения в версии 1.1.3 незначительны, но, надеюсь, что вскоре будет что-нибудь поинтереснее.

Остальной текст под катом