Новые функции в Helpers для проверки классов

This commit is contained in:
Anthony Axenov 2021-11-22 14:52:05 +08:00
parent 3bf8667437
commit 00b2643f42

View File

@ -52,4 +52,67 @@ final class Helpers
} }
return $result; 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));
}
} }