From 0444a35c558d6a73ba2538fdd0bf0289b5543996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kucha=C5=99?= <honza.kuchar@grifart.cz> Date: Mon, 1 May 2017 14:31:48 +0200 Subject: [PATCH] WIP: Dynamic implementation to simplify testing --- src/SignatureAssertionUtil.php | 16 ++++++---------- src/functions.php | 9 ++++++++- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/SignatureAssertionUtil.php b/src/SignatureAssertionUtil.php index 4a7f4e8..a56433b 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 be14bca..a19f419 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 -- GitLab