mirror of
https://github.com/anthonyaxenov/atol-online.git
synced 2024-11-25 14:04:07 +00:00
Новые функции в Helpers для проверки классов
This commit is contained in:
parent
3bf8667437
commit
00b2643f42
@ -52,4 +52,67 @@ final class Helpers
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет идентичность двух классов
|
||||
*
|
||||
* @param object|string $class1
|
||||
* @param object|string $class2
|
||||
* @return bool
|
||||
*/
|
||||
public static function isSameClass(object|string $class1, object|string $class2): bool
|
||||
{
|
||||
return (is_object($class1) ? $class1::class : $class1) === (is_object($class2) ? $class2::class : $class2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Тестирует наследование класса (объекта) от указанных классов
|
||||
*
|
||||
* @param object|string $class Объект или имя класса для проверки
|
||||
* @param string[] $parents Имена классов-родителей
|
||||
* @see https://www.php.net/manual/ru/function.class-parents.php
|
||||
*/
|
||||
public static function checkExtendsClasses(object|string $class, array $parents): bool
|
||||
{
|
||||
return self::checkClassesIntersection($parents, $class, 'class_parents');
|
||||
}
|
||||
|
||||
/**
|
||||
* Тестирует имплементацию классом (объектом) указанных интерфейсов
|
||||
*
|
||||
* @param object|string $actual Объект или имя класса для проверки
|
||||
* @param string[] $interfaces Имена классов-интерфейсов
|
||||
* @see https://www.php.net/manual/ru/function.class-implements.php
|
||||
*/
|
||||
public static function checkImplementsInterfaces(object|string $actual, array $interfaces): bool
|
||||
{
|
||||
return self::checkClassesIntersection($interfaces, $actual, 'class_implements');
|
||||
}
|
||||
|
||||
/**
|
||||
* Тестирует использование классом (объектом) указанных трейтов
|
||||
*
|
||||
* @param object|string $class
|
||||
* @param string[] $traits
|
||||
* @return bool
|
||||
* @see https://www.php.net/manual/ru/function.class-uses.php
|
||||
*/
|
||||
public static function checkUsesTraits(array $traits, object|string $class): bool
|
||||
{
|
||||
return self::checkClassesIntersection($traits, $class, 'class_uses');
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет пересечение классов указанной функцией SPL
|
||||
*
|
||||
* @param object|string $class Класс для проверки на вхождение, или объект, класс коего нужно проверить
|
||||
* @param string[] $classes Массив классов, вхождение в который нужно проверить
|
||||
* @param string $function class_parents|class_implements|class_uses
|
||||
*/
|
||||
protected static function checkClassesIntersection(array $classes, object|string $class, string $function): bool
|
||||
{
|
||||
$actual_classes = is_object($class) ? $function($class) : [$class::class];
|
||||
return is_array($actual_classes)
|
||||
&& !empty(array_intersect($classes, $actual_classes));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user