PHP の SPL:配列を含むインターフェイスはすべての配列プロパティをカバーしていますか?

StackOverflow https://stackoverflow.com/questions/145376

  •  02-07-2019
  •  | 
  •  

質問

必要な SPL インターフェイスをすべて実装することで、実際の PHP 配列と実質的に区別できないクラスを作成することは可能でしょうか?何か重要なものが欠けていませんか?

より高度な Array オブジェクトを構築したいのですが、配列をカスタム Array クラスに置き換えた場合に、あらゆる場所で配列を使用する既存のアプリが壊れないようにする必要があります。

役に立ちましたか?

解決

私が考えることができる唯一の問題は、gettype() 関数と is_array() 関数です。コードを確認してください

gettype($FakeArray) == 'array' 
is_array($FakeArray)

オブジェクトは配列と同じように使用できますが、それでもオブジェクトとして識別されるためです。

他のヒント

上記の点に加えて、ユーザー空間の配列型ヒントをクラスのインスタンスで機能させることはできません。例えば:

<?php
function f(array $a) { /*...*/ }

$ao = new ArrayObject();
f($ao); //error
?>

出力:

Catchable fatal error: Argument 1 passed to f() must be an array, object given 

その他の違いには、配列の「+」演算子 (マージ) と全体の失敗が含まれます。 array_* よく使用される機能を含む array_merge そして array_shift.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top