Symfony的文档表明多重类型提示是可能的。为什么?

时间:2015-04-01 18:41:54

标签: php symfony type-hinting

我曾认为多种类型提示是不可能的。但是,我在Symfony API Documentation文档中看到了这个构造函数。

__construct(array $options = array(), AbstractProxy|NativeSessionHandler|SessionHandlerInterface|null $handler = null, MetadataBag $metaBag = null)

对于第二个参数,它似乎可以使用多种类型。有人可以解释我所看到的吗?

1 个答案:

答案 0 :(得分:3)

这是一个很好的问题,虽然答案是它实际上并不是语言意义上的类型暗示。更多文档

https://github.com/symfony/symfony/blob/7c026bb33e8ca96b285402f7fe7ae27a04a74ea9/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php#L99

它是在source中定义的,没有类型提示

public function __construct(array $options = array(), $handler = null, MetadataBag $metaBag = null)

https://github.com/symfony/symfony/blob/7c026bb33e8ca96b285402f7fe7ae27a04a74ea9/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php#L353

功能存在的位置,它只是用instanceof检查文档中列出的所有类型提示

 if (!$saveHandler instanceof AbstractProxy &&
            !$saveHandler instanceof NativeSessionHandler &&
            !$saveHandler instanceof \SessionHandlerInterface &&
            null !== $saveHandler) {
            throw new \InvalidArgumentException('Must be instance of AbstractProxy or NativeSessionHandler; implement \SessionHandlerInterface; or be null.');
        }

这些提示被IDE用于一致性检查代码,如Pazi在评论中提到的那样

可在此处找到更多信息

http://www.phpdoc.org/docs/latest/guides/types.html

  

为了能够跟踪值中可以使用的类型,您可以使用   pipe,或OR,(|)运算符来分隔关联的每个类型   价值可能是。

     

在以下示例中,方法或函数将返回a   string或null作为值:

     

/ ** @return string | null * /大多数IDE会将此格式识别为   好,并提供自动完成