Utils::testValidInstance() now accepts interfaces for the baseName

This commit is contained in:
Dylan K. Taylor 2021-10-26 00:32:32 +01:00
parent 4178c81209
commit 24d4daec90
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -53,6 +53,7 @@ use function get_loaded_extensions;
use function getenv; use function getenv;
use function gettype; use function gettype;
use function implode; use function implode;
use function interface_exists;
use function is_array; use function is_array;
use function is_bool; use function is_bool;
use function is_int; use function is_int;
@ -513,14 +514,18 @@ final class Utils{
* @phpstan-param class-string $baseName * @phpstan-param class-string $baseName
*/ */
public static function testValidInstance(string $className, string $baseName) : void{ public static function testValidInstance(string $className, string $baseName) : void{
$baseInterface = false;
if(!class_exists($baseName)){ if(!class_exists($baseName)){
throw new \InvalidArgumentException("Base class $baseName does not exist"); if(!interface_exists($baseName)){
throw new \InvalidArgumentException("Base class $baseName does not exist");
}
$baseInterface = true;
} }
if(!class_exists($className)){ if(!class_exists($className)){
throw new \InvalidArgumentException("Class $className does not exist"); throw new \InvalidArgumentException("Class $className does not exist or is not a class");
} }
if(!is_a($className, $baseName, true)){ if(!is_a($className, $baseName, true)){
throw new \InvalidArgumentException("Class $className does not extend or implement $baseName"); throw new \InvalidArgumentException("Class $className does not " . ($baseInterface ? "implement" : "extend") . " $baseName");
} }
$class = new \ReflectionClass($className); $class = new \ReflectionClass($className);
if(!$class->isInstantiable()){ if(!$class->isInstantiable()){