protected function getPossibleTypes($value): array
    {
        $type = $this->getTypeOf($value);

        switch ($type) {
            case 'boolean':
            case 'integer':
            case 'float':
            case 'string':
                return $this->getPossibleScalarTypes($value);
            case 'array':
                return $this->getPossibleArrayTypes($value);
            case 'assoc':
                return $this->getPossibleAssocTypes($value);
            case 'object':
                return $this->getPossibleObjectTypes($value);
            case 'resource':
            default:
                return array_intersect($this->types, [$type]);
        }
    }
protected function getPossibleTypes($value): array
    {
        $type = $this->getTypeOf($value);

        switch ($type) {
            case 'boolean':
            case 'integer':
            case 'float':
            case 'string':
                return $this->getPossibleScalarTypes($value);
            case 'array':
                return $this->getPossibleArrayTypes($value);
            case 'assoc':
                return $this->getPossibleAssocTypes($value);
            case 'object':
                return $this->getPossibleObjectTypes($value);
            case 'resource':
            default:
                return array_intersect($this->types, [$type]);
        }
    }
protected function getPossibleTypes ( $ value ) : array { $ type = $ this -> getTypeOf ( $ value ) ; switch ( $ type ) { case 'boolean' : case 'integer' : case 'float' : case 'string' : return $ this -> getPossibleScalarTypes ( $ value ) ; case 'array' : return $ this -> getPossibleArrayTypes ( $ value ) ; case 'assoc' : return $ this -> getPossibleAssocTypes ( $ value ) ; case 'object' : return $ this -> getPossibleObjectTypes ( $ value ) ; case 'resource' : default : return array_intersect ( $ this -> types , [ $ type ] ) ; } }
Get possible types based on the value

@param mixed $value
@return array
Get possible types based on the value