20250810-1 v1.0

This commit is contained in:
2025-08-10 18:28:01 +03:00
parent 3dc403ebf2
commit 0d960ed3af
4 changed files with 153 additions and 26 deletions

View File

@@ -29,10 +29,46 @@
/**
* Конструктор.
*
* @param callable|null $function Метод сравнения значений.
* @param string|array|null $function Метод сравнения значений (может быть строкой (имя функции), может быть
* массивом (имя класса, имя метода) и null (по умолчанию)).
*/
public function __construct (?callable $function = null)
public function __construct (string|array|null $function = null)
{
$this->Function = $function;
// Преобразуем входные данные в замыкания
$this->Function = $this->CreateCallback($function);
}
/**
* Создает замыкание из переданного значения
*
* @param string|array|null $callbackData Данные для создания колбэка
*
* @return Closure|null
*/
private function CreateCallback (string|array|null $callbackData): ?Closure
{
// Если передан null
if ($callbackData === null)
// - возвращаем null
return null;
// Если передана строка - считаем это именем статического метода
if (is_string($callbackData))
// - создаём замыкание и возращаем его
return static fn (mixed $value1, mixed $value2): bool
=> call_user_func($callbackData, $value1, $value2);
// Если передан массив [класс, метод]
if (is_array($callbackData)) {
// - разбираем его
[$class, $method] = $callbackData;
// - создаём замыкание и возращаем его
return static fn (mixed $value1, mixed $value2): bool
=> call_user_func([$class, $method], $value1, $value2);
}
// В случае ошибки возвращаем null
return null;
}
}

View File

@@ -34,12 +34,48 @@
/**
* Конструктор.
*
* @param callable|null $fromType Метод конвертации из типа для заполнения таблицы базы данных.
* @param callable|null $toType Метод конвертации в тип для заполнения таблицы базы данных.
* @param string|array|null $fromType Метод конвертации из типа для заполнения таблицы базы данных (может
* быть строкой (имя функции), может быть массивом (имя класса, имя метода) и null (по умолчанию)).
* @param string|array|null $toType Метод конвертации в тип для заполнения таблицы базы данных (может быть
* строкой (имя функции), может быть массивом (имя класса, имя метода) и null (по умолчанию)).
*/
public function __construct (?callable $fromType = null, ?callable $toType = null)
public function __construct (string|array|null $fromType = null, string|array|null $toType = null)
{
$this->ConvertToDB = $fromType;
$this->ConvertFromDB = $toType;
}
/**
* Создает замыкание из переданного значения
*
* @param string|array|null $callbackData Данные для создания колбэка
*
* @return Closure|null
*/
private function CreateCallback (string|array|null $callbackData): ?Closure
{
// Если передан null
if ($callbackData === null)
// - возвращаем null
return null;
// Если передана строка - считаем это именем статического метода
if (is_string($callbackData))
// - создаём замыкание и возращаем его
return static fn (mixed $value): mixed
=> call_user_func($callbackData, $value);
// Если передан массив [класс, метод]
if (is_array($callbackData)) {
// - разбираем его
[$class, $method] = $callbackData;
// - создаём замыкание и возращаем его
return static fn (mixed $value): mixed
=> call_user_func([$class, $method], $value);
}
// В случае ошибки возвращаем null
return null;
}
}