2015-04-01 15 views
3

我曾假設多種類型暗示是不可能的。但是,我在Symfony API Documentation文檔中看到了此構造函數。Symfony的文檔意味着多種類型的暗示是可能的。爲什麼?

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

對於第二個參數,它使它看起來可能有多種類型。有人能解釋我所看到的嗎?

+0

@watcher我先看過那篇文章。我不是問是否可能,我認爲不是。我在問爲什麼代碼字符串看起來像是可能的。你對編輯帖子有什麼建議可以更好地反映這一點嗎? – nobrandheroes 2015-04-01 19:29:35

+0

@watcher問題已更新。 – nobrandheroes 2015-04-01 19:41:38

回答

3

這是一個很好的問題,但答案並不是語言意義上的類型提示。多個文檔

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的一致性檢查代碼中使用,作爲帕子在評論

更多信息可以在這裏找到

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

提到能夠跟蹤其可使用的類型在一個值中,您可以使用 管道或OR(|)運算符來分隔與關聯的 值相關的每種類型。

在下面的示例中的方法,或功能,會返回一個字符串 或空的值:

/** @返回字符串| NULL * /大多數IDE將識別這種格式 好,報價自動完成

+1

我正要回答幾乎相同的事情,根據[這裏](http://stackoverflow.com/questions/3840094/is-it-possible-to-specify-more-than-one-type-hint - 爲參數)具有多個類型提示是不允許的(我無法從文檔中找到相關的引用)。我認爲symfony文檔僅僅是出於'審美'原因而使用該命名法。 – 2015-04-01 19:11:02

+2

在文檔塊中定義了多個「類型提示」,並不是出於美學原因。 IDE可以評估docblock,並警告如果給定的類不在範圍內,如果docblock類型 – 2015-04-01 19:14:32

+0

我沒有想到該文檔反映了源代碼謝謝。 – nobrandheroes 2015-04-01 19:27:22

相關問題