スタッフブログ
haltです.
RubyやC#をはじめとした,純粋なオブジェクト指向言語を使ってプログラミングをした経験がある人は,PHPの適当さにクラクラしつつ「もっとオブジェクト指向したいなー」と思うのではないでしょうか.
そういった人の夢を少しだけ叶えてくれるのが今日紹介する.PHP_Object ( http://openpear.org/package/PHP_Object ) です.
インストールはいつものようにpearコマンドでインストールしたあと require_once 'PHP/Object.php'; を追加するだけです.
PHP_Objectは,文字や配列をオブジェクトとして扱えるようにしてくれます.
言葉で説明するよりも,実際のコードを見てもらう方が早いでしょう.
以下は,文字列を編集しているコードです.両端の「|」を削除したあと,中心にある「ZZZ」を削除して「ABCDEF」という文字列を作るというシンプルなものです.
まずは普通の書き方の場合.
という感じになります.これをPHP_Objectを使ってかくと.
というように書く事ができます.
PHP_Object::factoryによって,文字列が文字列オブジェクトとなり,PHPの関数を自らのメソッドとして呼ぶ事ができます.
このメソッドは通常のPHPのオブジェクトと同じ仕組みで動作しているので当然ながらメソッドチェーンも使えるようになります.メソッドチェーンのメリットは,文字通り鎖のように,最初の処理の結果が次の処理につながっていく事で読みやすくなる事です.
また,PHP_Object経由で文字列オブジェクトを作成すると,メソッド名の先頭にあるstrやstr_を省略する事ができます.上記コードで呼ばれているreplaceメソッドはstr_replaceです.これで,strposやstr_repeatのような,統一感のない関数名からも距離を置く事ができるようになります.
当然ながら,通常の文字列を操作するよりも,文字列オブジェクトを作って操作する方がメモリ消費が大きいので,使う場所についてはよく考える必要がありますが,非常におもしろいライブラリなので一度は使ってみると良いでしょう.
RubyやC#をはじめとした,純粋なオブジェクト指向言語を使ってプログラミングをした経験がある人は,PHPの適当さにクラクラしつつ「もっとオブジェクト指向したいなー」と思うのではないでしょうか.
そういった人の夢を少しだけ叶えてくれるのが今日紹介する.PHP_Object ( http://openpear.org/package/PHP_Object ) です.
インストールはいつものようにpearコマンドでインストールしたあと require_once 'PHP/Object.php'; を追加するだけです.
PHP_Objectは,文字や配列をオブジェクトとして扱えるようにしてくれます.
言葉で説明するよりも,実際のコードを見てもらう方が早いでしょう.
以下は,文字列を編集しているコードです.両端の「|」を削除したあと,中心にある「ZZZ」を削除して「ABCDEF」という文字列を作るというシンプルなものです.
まずは普通の書き方の場合.
$message = '|ABCZZZDEF|';
$message = trim($message, '|');
$message = str_replace('ZZZ', '', $message);
var_dump($message);
という感じになります.これをPHP_Objectを使ってかくと.
require_once 'PHP/Object.php';
$message = PHP_Object::factory('|ABCZZZDEF|')->trim('|')->replace('ZZZ', '')->var_dump;
というように書く事ができます.
PHP_Object::factoryによって,文字列が文字列オブジェクトとなり,PHPの関数を自らのメソッドとして呼ぶ事ができます.
このメソッドは通常のPHPのオブジェクトと同じ仕組みで動作しているので当然ながらメソッドチェーンも使えるようになります.メソッドチェーンのメリットは,文字通り鎖のように,最初の処理の結果が次の処理につながっていく事で読みやすくなる事です.
また,PHP_Object経由で文字列オブジェクトを作成すると,メソッド名の先頭にあるstrやstr_を省略する事ができます.上記コードで呼ばれているreplaceメソッドはstr_replaceです.これで,strposやstr_repeatのような,統一感のない関数名からも距離を置く事ができるようになります.
当然ながら,通常の文字列を操作するよりも,文字列オブジェクトを作って操作する方がメモリ消費が大きいので,使う場所についてはよく考える必要がありますが,非常におもしろいライブラリなので一度は使ってみると良いでしょう.