diff --git a/CHANGELOG.md b/CHANGELOG.md index effa751..256959e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 0.5.15 * perf: Add caching for `TransformerRegistry`. +* perf: Optimize `guessTypeFromVariable` ## 0.5.14 diff --git a/src/TypeResolver/TypeResolver.php b/src/TypeResolver/TypeResolver.php index 79ad154..5e8f6e6 100644 --- a/src/TypeResolver/TypeResolver.php +++ b/src/TypeResolver/TypeResolver.php @@ -23,36 +23,14 @@ class TypeResolver implements TypeResolverInterface { public function guessTypeFromVariable(mixed $variable): Type { - if (is_object($variable)) { - return TypeFactory::objectOfClass($variable::class); - } - - if (is_null($variable)) { - return TypeFactory::null(); - } - - if (is_array($variable)) { - return TypeFactory::array(); - } - - if (is_bool($variable)) { - return TypeFactory::bool(); - } - - if (is_int($variable)) { - return TypeFactory::int(); - } - - if (is_float($variable)) { - return TypeFactory::float(); - } + $type = get_debug_type($variable); - if (is_string($variable)) { - return TypeFactory::string(); + if (in_array($type, ['array', 'bool', 'int', 'float', 'string'])) { + return new Type($type); } - if (is_resource($variable)) { - return TypeFactory::resource(); + if (class_exists($type)) { + return TypeFactory::objectOfClass($type); } throw new InvalidArgumentException(sprintf(