2017-10-10 4 views
0

私はタイプヒントかPHP7で始めるのが好きですが、実際にゲッター関数の戻り値を示しています。しかし、Doctrine/SymfonyのOne-To-Many関係では、私はまだ詰まっていて、@varタグに何を追加するのか分かりません。Doctrine/Symfony One-To-ManyリレーションシップでgetSomethingsの戻り値は何ですか?

[...] 

/** 
* @var string 
* @ORM\Column(name="name", type="string") 
*/ 
private $features; 


/** 
* What goes into var here? 
* 
* One Product has Many Features. 
* @ORM\OneToMany(targetEntity="Feature", mappedBy="product") 
*/ 
private $features; 

public function __construct() 
{ 
    $this->features = new ArrayCollection(); 
    $this->name = 'New Product Name'; 
} 

/** 
* @return Collection 
*/ 
public function getFeatures(): Collection 
{ 
    return $this->features; 
} 


[...] 

現在、私は@var Collectionを使用しており、コレクション機能を使用できます。しかし、»返すべきものは何でしょうか?それは確かにCollectionですか?それともArrayCollectionですか?私はフィーチャーの機能を使用するためにFeatures[]を使用するように誘惑されています。もし必要ならば(タイプヒントの代わりに)、それは正しいと感じません。

は何これを行うには»クリーン«/安定した方法だろうか?

答えて

1

あなたがのdocblockを維持したい場合は私がコレクションし、それは次のように含まれている値のリストを指定の両方に共用体型|を使用します。これはあなたのIDEで

/** 
* @var Collection|Feature[] 
*/ 

両方のコレクションからの方法を見つける必要がありますコレクションから単一のオブジェクトを取得したときのフィーチャタイプのヒントforeachで。コレクション対のArrayCollectionの質問に関しては

、通常、インターフェース(この場合はコレクション)のためのヒントを入力することをお勧めします。 ArrayCollectionにはさらにいくつかのメソッドがありますが、本当に必要な場合を除いて、私は型ヒントを得るだけで気にしません。私はプロジェクトで行う傾向にある何

は、エンティティ内のコレクションを維持し、これだけのようなゲッターの配列を渡しです:

public function getFeatures(): array 
{ 
    return $this->features->toArray(); 
} 

public function setFeatures(array $features): void 
{ 
    $this->features = new ArrayCollection($features); 
} 

は注意してください、void戻り値の型は、PHP 7.0でサポートされていません。まだ。配列を返すことの利点は、あなたのコードで、Collection Doctrineがどんな種類のものを使うのか心配する必要がないことです。そのクラスは、主にDoctrineの作業単位内のオブジェクト間の参照を維持するために使用されるため、実際にはあなたの懸念事項の一部ではありません。

+0

提案をしてくれてありがとう! ' - > toArray()'の方法はかなりいいです(ArrayCollectionは主に 'array'のラッパーです)。私は私のIDEでゲッターテンプレートを変更し、それが動作するはずです。 'Collection | Feature []'の方法は実用的だと思うが、それは少し汚れていると感じている。私は主にAWS ElasticBeanstalkを使用していましたが、数週間前にPHP 7.1をすぐにサポートするようになったので、void戻り値の型も今は良いはずです! –

関連する問題