private static function matchType(\ReflectionParameter $parameter, $value) : bool
    {
        if ($class = $parameter->getClass()) {
            return \is_object($value) && $class->isInstance($value);
        }

        if ($parameter->isArray()) {
            return \is_array($value);
        }

        if ($parameter->isCallable()) {
            return \is_callable($value);
        }

        if (!$type = $parameter->getType()) {
            return true;
        }

        switch ($type->getName()) {
            case 'bool': return \is_bool($value);
            case 'float': return \is_float($value);
            case 'int': return \is_int($value);
            case 'string': return \is_string($value);
            case 'iterable': return \is_iterable($value);
        }

        return true;
    }
private static function matchType(\ReflectionParameter $parameter, $value) : bool
    {
        if ($class = $parameter->getClass()) {
            return \is_object($value) && $class->isInstance($value);
        }

        if ($parameter->isArray()) {
            return \is_array($value);
        }

        if ($parameter->isCallable()) {
            return \is_callable($value);
        }

        if (!$type = $parameter->getType()) {
            return true;
        }

        switch ($type->getName()) {
            case 'bool': return \is_bool($value);
            case 'float': return \is_float($value);
            case 'int': return \is_int($value);
            case 'string': return \is_string($value);
            case 'iterable': return \is_iterable($value);
        }

        return true;
    }
private static function matchType ( \ ReflectionParameter $ parameter , $ value ) : bool { if ( $ class = $ parameter -> getClass ( ) ) { return \ is_object ( $ value ) && $ class -> isInstance ( $ value ) ; } if ( $ parameter -> isArray ( ) ) { return \ is_array ( $ value ) ; } if ( $ parameter -> isCallable ( ) ) { return \ is_callable ( $ value ) ; } if ( ! $ type = $ parameter -> getType ( ) ) { return true ; } switch ( $ type -> getName ( ) ) { case 'bool' : return \ is_bool ( $ value ) ; case 'float' : return \ is_float ( $ value ) ; case 'int' : return \ is_int ( $ value ) ; case 'string' : return \ is_string ( $ value ) ; case 'iterable' : return \ is_iterable ( $ value ) ; } return true ; }
Checks if the value matches the parameter type.

@param \ReflectionParameter $parameter
@param mixed                $value

@return bool
Checks if the value matches the parameter type .