17

ArrayAccessを実装する配列またはオブジェクトを許可することは可能ですか?

例えば:

class Config implements ArrayAccess {
    ...
}

class I_Use_A_Config
{
    public function __construct(Array $test)
    ...
}

ArrayまたはArrayAccessのいずれかを渡せるようにしたい。

パラメータタイプを手動でチェックする以外に、これを行うためのクリーンな方法はありますか?

4

2 に答える 2

15

いいえ、それを行う「クリーンな」方法はありません。

arrayタイプはプリミティブタイプです。インターフェイスを実装するオブジェクトは、複合型ArrayAccessとも呼ばれるクラスに基づいています。両方を含むタイプヒントはありません。

を配列として使用しているのでArrayAccess、キャストするだけで済みます。例えば:

$config = new Config;
$lol = new I_Use_A_Config( (array) $config);

それがオプションでない場合(Configオブジェクトをそのまま使用する場合)は、タイプヒントを削除して、配列または。のいずれかであることを確認してくださいArrayAccess。あなたがそれを避けたかったことは知っていますが、それは大したことではありません。それはほんの数行であり、すべてが言われ、行われたとき、取るに足らないものです。

于 2013-02-11T06:45:11.777 に答える