404 motivation not found | t_ishidaのブログ

2月/08

25

PSONクラス

能書き

昼休みちょっと思いついた事があったので。

MVCフレームワークの中でActionClassの部分をPerlでも書けるようにしたらどうか?

って考えた。

例えば、こんな場合、

1、「通常はPHPでメンテナンスしているんだけど

   割と実現に手間がかかる機能の実現に迫られた。

   どうやらCPANで既に提供されているが、PEARにはない、

   もしくは、PEARのは不安定で怪しい。さあ、どうする?」

2、「緊急リリース、PHPは勉強中でいまいち生産性が上がらない。

   でも、Perlなら納期に間に合う」

って言うとき、データの受け渡しの選択肢としてXMLやYAMLやJSONってのも有るんだろうけど、二人はもっと仲良く、evalとData::Dumperでやれたならって考えてみた。

TODO

  • まだ全然不完全だけど、stdClassをarrayにキャストしたりオブジェクトをどうするか?を考えたり。
  • decodeまだできていない。(でも、文字列中以外の、[と{ を array( 、]と}を)に置換でいけるよね? )
  • ってか既に有りそう?(PHP PSONでは見つからなかった)

ソース

<?
$xyzzy = array(
'key' => 'val' ,
'key2' => 'val' ,
'key3' => array( 1,2,3 )
);

$xyzzy2 = array(
array( 'key' => 'val' , 'key2' => 'val') ,
array( 'key' => 'val' , 'key2' => 'val') ,
array( 'key' => 'val' , 'key2' => 'val') ,
);

$xyzzy3 = array(
0 ,
1 ,
'key' => 'val'
);
print '$xyzzy  = ' . PSON::encode($xyzzy)  . ";\n";
print '$xyzzy2 = ' . PSON::encode($xyzzy2) . ";\n";
print '$xyzzy3 = ' . PSON::encode($xyzzy3) . ";\n";

class PSON {
public static function encode( $data ){
$ret = '';
if( is_array($data) ) {
$keys = array_keys( $data );

if( count( preg_grep( '/[^0-9]/' ,$keys ) ) ) {
$ret .= '{';
foreach( $keys as $key ) $ret .= "'$key'=>" . PSON::encode( $data[$key] );
$ret .= '}';
} else {
$ret .= '[';
foreach( $keys as $key ) $ret .= PSON::encode( $data[$key] );
$ret .= ']';
}
return $ret;
} else {
if( preg_match( '/^(?:[1-9]\d+|\d)$/',$data ) )  return $data . " ,";
else                                      return "'" . str_replace( "'", "\'", $data )  . "',";
}
}
}
Share and Enjoy:
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Tumblr
  • email
  • Facebook
  • FriendFeed

RSS Feed

コメントはまだありません。

Leave a comment!

<< 正規表現の先読み・戻り読み

PHPではまり易かったところ >>

Find it!

Theme Design by devolux.org

Tag Cloud