PHPでJavaScriptの配列を実装した

きっかけ

アルゴリズム百選 – 配列を再発明するという、JavaScriptのArrayを独自のオブジェクトで再実装する記事を読んで、同じことをPHPでやったらどうなるか試してみました。

結果

https://github.com/ryo-utsunomiya/JsArray

使い方

$fruits = new MyArrayJsArray("Banana", "Orange", "Lemon", "Apple");
$fruits[] = "Mango";
echo $fruits->pop(); // "Mango"
$citrus = $fruits->slice(1, 3);
echo $citrus[0]; // "Orange"

より詳細な使い方はテストを見るとよいかも。

作り方

PHPにはArrayAccessというインターフェースがあります。これを実装すれば、オブジェクトのプロパティに対して、配列と同じ記法でアクセスできるようになります。基本的な機能はこのインターフェースを実装すればOKで、あとはMDNのリファレンスを参考にメソッドを実装していきました。

get/set/pop/push/shift/unshift/toArrayはアルゴリズム百選 – 配列を再発明するの実装を参考に(というかほとんど丸写しで)実装しました。あと、実は参考実装に1点バグに近い挙動(spliceで削除されたはずの値がオブジェクトに残ってしまう)があり、この点は私の実装でも未修正の状態です。

EcmaScriptの仕様に完全準拠というわけでもなく、未実装部分やズルをしている部分もあったりしますが、とりあえず現状できたところまでで上げてしまおうかな、と。主な宿題は、sort/mapあたりの実装と、shift/unshiftの書き直しです。

こんなの何の役に立つの? と思われそうな感じですが、役に立ったところは (1) PHPのArrayAccessとcloneの使い方をちゃんと理解できた (2) JavaScriptのArrayの仕様を理解できた の2点ですね。特に(2)は大きかったです。

コメントをどうぞ

コメントを残す