2017-01-12 10 views
1

以下のコードでMyInterfaceの配列を受け取りたいと思います。特定のインターフェイスの配列をPHPクラスメソッドで受け取る方法は?

public function saveMultiple(
    \Path\To\MyInterface $attachLinks[] 
); 

上記のコードは機能しません。

だから、\Path\To\MyInterfaceを削除し、変数$attachLinksを使用してください。私はすでにそれを認識していますが、これは私が必要とするものです。

+0

どのphp版を使用しましたか? – donald123

+0

良い、私はそれを探していたあなたは私の時間を保存しました:) –

答えて

0

これまでのところ、これが可能なものですPHP7を使用して行われます。特定の型の配列を渡す日付までは可能ではありません。

public function saveMultiple(
    array $attachLinks 
); 

少なくとも、メソッドがパラメータとして配列を取得することを確認します。

+0

ここで投票した人は理由を説明するだけでなく、コメントを述べる必要があります。あなたは私が尋ねた何かをより良く判断することができますか? –

1

PHPにはジェネリックタイプがありませんので、タイプ「何かの配列」を指定することはできません。

しかし、あなたはトリックを行うかもしれません。配列内の要素の型をチェックします。

array_walk($attachLinks, function (\Path\To\MyInterface $item) {}); 

あなたがアサートでそれをラップしている場合は、このチェックを無効にすることができるようになります。

assert('array_walk($attachLinks, function (\Path\To\MyInterface $item) {})'); 
+0

これは、渡す配列の種類のインターフェイスを強制する目的を達成しません。 –

+0

はい。あなたが望むものではありません。これは、配列内の不正な項目でコードが実行されないようにするための回避策です。 –

-1

たぶん、あなたは次のようにセッターのいくつかのタイプを使用することができます。

private $attachLinks = []; 
public function setter(MyInterface $var) 
{ 
    $this->attachLinks[] = $var; 
} 

との$ this - を使用するよりも>あなたの関数でattachLinks

public function saveMultiple() { 
    print_r($this->attachLinks); 
} 
関連する問題