diff --git a/src/SignatureAssertionUtil.php b/src/SignatureAssertionUtil.php index 4a7f4e8976f9426bfb3bbad5f06c65adb5c72654..a56433b6335e27c05a7be1af274b5fc46ef019af 100644 --- a/src/SignatureAssertionUtil.php +++ b/src/SignatureAssertionUtil.php @@ -7,12 +7,8 @@ namespace Grifart\AssertFunction; final class SignatureAssertionUtil { - private function __construct() - { - } - - public static function checkSignature(callable $function, array $parameters, ?string $expectedReturnType): void + public function checkSignature(callable $function, array $parameters, ?string $expectedReturnType): void { $reflection = new \ReflectionFunction($function); @@ -31,10 +27,10 @@ final class SignatureAssertionUtil $parameterReflection = $reflection->getParameters()[$i++]; assert($parameterReflection instanceof \ReflectionParameter); - self::checkFunctionParameter( + $this->checkFunctionParameter( $reflection, $parameterReflection, - ...self::parseType($parameter) + ...$this->parseType($parameter) ); } @@ -46,7 +42,7 @@ final class SignatureAssertionUtil } if ($reflection->hasReturnType()) { - list($expectedReturnType, $expectingNullable) = self::parseType($expectedReturnType); + list($expectedReturnType, $expectingNullable) = $this->parseType($expectedReturnType); $returnTypeReflection = $reflection->getReturnType(); $actuallyNullable = $returnTypeReflection->allowsNull(); @@ -68,7 +64,7 @@ final class SignatureAssertionUtil } } - private static function parseType(string $type): array + private function parseType(string $type): array { $cleanType = $type; // e.g. ?Namespace\Class $nullable = FALSE; @@ -79,7 +75,7 @@ final class SignatureAssertionUtil return [$cleanType, $nullable]; } - private static function checkFunctionParameter( + private function checkFunctionParameter( \ReflectionFunction $functionReflection, \ReflectionParameter $parameterReflection, string $expectedParameterType, diff --git a/src/functions.php b/src/functions.php index be14bca28f21cfba344c1d6a4c1be8eb0470aec1..a19f4199de21f4a7be5a61ed1caadde9fbd4a96c 100644 --- a/src/functions.php +++ b/src/functions.php @@ -8,6 +8,9 @@ namespace Grifart\AssertFunction; +/** @var \Grifart\AssertFunction\SignatureAssertionUtil $assertionUtil */ +$assertionUtil = NULL; + function params(string ...$params): array { return $params; @@ -20,8 +23,12 @@ function nullable(string $classType): string function assertSignature(callable $function, array $parameters, ?string $expectedReturnType): void { + global $assertionUtil; + if(!$assertionUtil) { + $assertionUtil = new SignatureAssertionUtil(); + } try { - SignatureAssertionUtil::checkSignature( + $assertionUtil->checkSignature( $function, $parameters, $expectedReturnType