4

最近の PHP の更新では、ArrayAccess、Iterator、Countable など、オブジェクトを配列として扱えるようにするさまざまなインターフェイスが追加されました。

私の質問は、次のことが機能することは理にかなっているでしょうか。

function useArray(array $array)
{
    print_r($array);
}

useArray(new ArrayObj(array(1,2,3,4,5));

$array現時点では、技術的には配列ではないため、PHP は型ヒント エラーをスローします。ただし、基本的に配列と同じにするすべてのインターフェイスを実装しています。

echo $array[0]; // 1
$array[0] = 2;
echo $array[0]; // 2

論理的には、オブジェクトは配列と同じインターフェイスを実装しているため、配列を使用できる場所ならどこでも使用できるはずです。

私の論理は混乱していますか、それともオブジェクトが配列と同じインターフェイスを実装している場合、それはすべて同じ場所で使用できるべきであるということは理にかなっていますか?

4

2 に答える 2

0

タイプのヒントは、タイプ「配列」を示していますが、「ArrayObj」を渡しています

function useArray(array $array)
...
useArray(new ArrayObj

そうそう、文句を言うつもりです。

私の論理は混乱していますか、それともオブジェクトが配列と同じインターフェイスを実装している場合、それはすべて同じ場所で使用できるべきであるということは理にかなっていますか?

オブジェクトが別のクラスと同じインターフェイスを実装している場合、それらを交換可能に使用できますが、同じ型ではないため、コンパイラが型ヒントについて不平を言うことは依然として有効です。

2 つのオブジェクトが同じインターフェイスを実装しているからといって、それらが同じ型であるとは限りません。

于 2010-02-06T19:33:13.843 に答える