openpearでPHP_Objectというライブラリを公開しました


PHP_Object - openpear


実用性はほとんどないライブラリですが。
以下説明。
openpearに書いてあるものほとんどそのままです。

PHP_Object

PHPを純粋なオブジェクト指向プログラミング言語っぽく書けるようにする。
主にメソッドチェーンするためのライブラリ。

サンプル

<?php
require_once 'PHP/Object.php';

function p($data) {
    return PHP_Object::factory($data);
}

$array = p(array('foo', 'bar')); // Arrayオブジェクトを作成
$array->push('baz');             // array_pushのエイリアス
$array->var_dump;                // 引数がない場合、括弧は省略できる
/* 出力結果
&array(3) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(3) "baz"
}
*/

$array = p('Hello,World!')->replace('World', 'PHP') // WorldをPHPに置換、str_replaceのエイリアス
                           ->echo                   // Hello,PHP! を出力
                           ->explode(',')           // 「,」で分割し配列にして返す
                           ->tap('rsort');           // rsortメソッドをコールし、自分自身を返す

foreach ($array as $value) {
    $value->echo("\n"); // PHP!、Helloの順に出力
}

特徴

  • 全てのPHP関数をメソッドとして呼び出せる
  • 引数をとらないメソッドの括弧は省略できる
  • Arrayオブジェクトは通常の配列型のようにforeachでのループや、[]を使ったアクセスができる
  • echo、printなど、PHPの言語構造をメソッドとして呼び出せる
  • メソッドの引数に、そのままPHP_Objectオブジェクトを渡すことができる
  • メソッドが返す値は全てPHP_Objectオブジェクト(配列のキーや一部メソッドを除く)
  • 戻り値がない(void)関数を、メソッドとして呼び出した時は、代わりに自分自身を返す
  • Arrayオブジェクトからのメソッド呼び出し時にはメソッド名の「array_」を省略できる
  • Stringオブジェクトからのメソッド呼び出し時にはメソッド名の、「str」と「str_」を省略できる
  • valメソッドで、元の値を取得できる(Stringオブジェクトから呼び出した場合文字列、など)
  • tapメソッドで第一引数にコールバックメソッド名を渡すと該当メソッド呼出し後、その戻り値ではなく自分自身を返す


元ネタは下の記事です。
ArrayObjectで遊んでみる - おぎろぐはてな


あとは型変換用メソッドなどのメソッド追加、クラス構造の改善などを行う予定。


※2008-12-14 サンプルが適切ではなかったので修正しました