【问题标题】:Symfony's documentation Implies that Multiple Type-Hinting is Possible. Why?Symfony 的文档暗示多重类型提示是可能的。为什么?
【发布时间】:2015-06-06 13:09:01
【问题描述】:

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

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

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

【问题讨论】:

  • @watcher 我首先阅读了那篇文章。我不是在问是否可能,我认为不可能。我在问为什么代码字符串使它看起来像是可能的。您对编辑帖子以更好地反映这一点有什么建议吗?
  • @watcher 问题已更新。

标签: php symfony type-hinting


【解决方案1】:

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

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

是在源码中定义的地方,没有类型提示

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 在 cmets 中提到的那样

更多信息可以在这里找到

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

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

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

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

【讨论】:

  • 我正要回答几乎相同的事情,根据here,不允许有多个类型提示(我无法从文档中找到相关的引用)。我认为 symfony 文档仅出于“审美”原因使用该命名法。
  • 多个“类型提示”在文档块中定义,并非出于审美原因。 IDE 可以评估 docblock 并在给定类不在范围内时发出警告(如果 docblock 类型)
  • 我没有想到文档反映了来源谢谢。
  • @Pazi OP 似乎是专门询问在线文档,而不是文档块,但这是一个好点。
  • 在线文档来源于源码中的docblocks,而不是php函数声明中的具体类型提示。
猜你喜欢
  • 2018-02-04
  • 2015-07-16
  • 2021-08-18
  • 2023-01-22
  • 2016-06-10
  • 2015-12-10
相关资源
最近更新 更多