« 次世代のデータ記述言語(かも!)JAXON | メイン | 【Web Design】なるほどリンク集 その1 »

人のソースを読むと勉強になる
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

Keitaです。
僕はもともと、Delphiの技術者で、PHPに関してはほとんど独学で勉強してきました。
もともとHTTP周りのアプリケーションには興味があり多少の知識やバッドノウハウはあったのですが、明確なスタイルは、いくつかの書籍を呼んでみても残念ながら得られませんでした。

で、ある日悩んでたところ、Pukiwikiというオープンソースのスクリプトを設置することになり、設置の方法について調べているうちにソースを読むことになりました。

で、Perlで掲示板!!とかいう時代のころにしては、Pukiwikiってわりと綺麗なソースなのでコーディングスタイルを含めてかなりいろいろなところが勉強になりました。

特に印象に残っているのがこのコードです。

function input_filter($param)
{
    static $magic_quotes_gpc = NULL;
    if ($magic_quotes_gpc === NULL)
        $magic_quotes_gpc = get_magic_quotes_gpc();

if (is_array($param)) {
return array_map('input_filter', $param);
} else {
$result = str_replace("\0", '', $param);
if ($magic_quotes_gpc) $result = stripslashes($result);
return $result;
}
}

僕がみたころのコードはもっとはるかに単純だったと思います。
このプログラムは再起処理をする必要があるプログラムでarray_mapで処理しています。
このため、より高速にプログラムが処理できるようになっています。
このわずか15行にもみたないプログラムでも、いろいろなことを学びました。

今世の中で、公開されているPHPのスクリプトはわりといいものも悪いものもあったりして、どれを読んだらいいのかというのはわかりづらいかと思いますが、もし、今読むとしたら。
Zend Frameworkや、EthnaSymfonyなどのフレームワークがお勧めです。

僕はEthnaを読むことが多いのですが、PHP4的なオブジェクト指向の絶妙な妥協点とかが見えて非常に面白いです。


あと、最近は、Cの勉強をしようかとおもっていて、PHP本体のソースコードにも目を通すようになりました。
まだぜんぜんわからないですが、少しずつわかってきてこれでいざとなったら、PHPのバグも直せるようになったらなーと思っています。

オープンソースが流行して、いろいろなソースが読めるような時代になったのは、技術者として非常にエキサイティングな時代になったと思います。
もし、読んでる途中でバグを見つけたりしたら、そのパッチを投げたりすれば、もしかすると新しい出会いがあるかもしれません。

社内のコードばかり見ているのもいいですが、たまには外のコードを時間をかけて読んで見てはいかがでしょうか。

トラックバック

このエントリーのトラックバックURL:
http://www.unoh.net/mt32/mt-tb.cgi/356

コメント

PukiWikiのコードってかなり読みくかった気がします.HTMLとPHPがごちゃごちゃになってて(今はどうか知らないけど).
PHPのアプリケーションだと XOOPSとかWordPressは比較的きれいだと思います.コードの断片でよければPEARも参考になりますよ.

本来テンプレート扱いとなるSkinまでの流れは、当時としては、結構、綺麗でした。
テンプレートを修正しようとすると、SkinがPHPとまぜこぜなので、そう感じるかもしれません。

定期的にリファクタもされていているようなので。今後も改善は期待できると思います。

今はskin以外は大分整理されていると思います
テンプレートエンジンがないのでプラグイン内はHTMLと混在してますけどね
コード量が少ない分まだよめるのかなぁとか言う側面はあるかと

綺麗なコードだとJawsはそこそこ綺麗にMVCで書かれていると思います
MDB2の勉強にもなっていいかも(デバッグ目的以外にまじめに読んでないけど
あとXOOPSならXOOPS Cubeもありだと思いますがコード量がべらぼうに増えてるのでそれはそれで大変かも(苦笑

僕が最初に読んだのはFreeBSD(98)のソースコードでした。
UNIX のソースコード読むなら、最初は FreeBSD がいいと思います。
FreeBSD なら最初から OS にソースコードがついてるし、OS とセットになってるのでプログラムも簡潔で短くて読みやすい。

Linux だと普通はソースパッケージ入れないといけなくて面倒だし、GNU のソフトウェアはマルチプラットフォーム前提なので、非互換性の処理がいろいろ入ってたりして雑音が多いので、本質的な部分を理解するのに時間がかかってしまう。

>Jaws
おー読んでみます。
Xoopsは、何回か挑戦しているのですが、いまいちコードになじめていません。もう一回やってみよう。

>FreeBSD
ほーほー。参考になります。
でもここら辺って全体的に今だと肥大化してそうですね。
というか98が懐かしいです...

どうでもいいけど一応
s/Pukiwiki/PukiWiki/
ですね

array_map()もそろそろarray_map_recursive()とかできないかなぁ

array_map()で設定する関数に送り値を設定できるようになるとうれしいですねー

送り値って何だろ
任意の値を渡したいとかなら
array_walk()が使えます

http://php.net/array_walk

問題は任意の引数を追加すると常にE_NOTICEでることなんですけど

#この配列をなめて$fooに結果をまとめたいとかによく使いました > array_walk()

コメントを投稿


画像の中に見える文字を入力してください。