PHP、すごく手軽で良いですね。セッション管理が楽だー。
これならさくさくといろいろ面白いサービスが作れそうですね。
とりあえず、今後はDBとの連携を一通りやってみるつもり。
いつも楽しみに見ているたつをのChangeLogのたつをさんがPHPをはじめられたっ!
せっかくなので自分が「そういうの最初から教えておいてくれよ」と思ったことを書き出してみます。
PHP Switcher Q&A
Q. GETやPOSTを手っ取り早く取りたいんだけどCGIモジュール的なものは?
A. PHPコアの機能に含まれています。GETやPOSTのデータは自動的にグローバル変数の$_GET, $_POSTに連想配列として入っています。
Q. セッションは?
A. PHPコアの機能に含まれています。$_SESSIONというグローバル変数(連想配列)に代入するだけでセッションにデータが入ります。
Q. 配列と連想配列はどう違う?
A. 配列と連想配列は内部的には同じモノです。添字に文字列を指定すると連想配列になります。(添字に数字と認識できる文字列を入れると自動的に数値に変換されます。)
Q. ヘッダはどうやって書く?
A. Apacheモジュール版PHP(mod_php4)ではヘッダは自動的に付与されます。明示的に書きたい場合はheader関数を使います。それに対してコマンドライン版PHP(cli)が存在します。
Q. サードパーティ製モジュールは?
A. PerlでいうCPANにあたるPEARというリポジトリサイトがあります。(モジュールの登録には他のPEARメンテナの賛成投票が5票以上必要でstable/unstableという分類もあるため、CPANよりモジュール数が少ない代わりに一定の品質は保障されています。)
Q. PHP自体に機能を追加したい
A. Pure PHPのみのPEARに対して、Cで書かれたPHP extentionのリポジトリサイトとしてPECL(ぴくる)があります。
Q. Template-toolkit的なものは?
Q. PHP自体がHTMLに埋め込めるんだからテンプレートエンジンなんていらないんじゃないの?
A. そういう考えのもと、PHP自体をテンプレートとして扱うSavantというテンプレートエンジンもあります。
Q. Webアプリケーションフレームワークは?
A. Mojavi!
その他、国産フレームワークのMaple、Ethna、Java Seasar2のPHPポーティングS2PHP5などが有名です。
Q. O/Rマッパーは?
A. PEAR DB_DataObject。PHP5ではPropelなど。
PHP全体の印象としては、便利なものは少々言語デザイン的に美しくなくても標準関数にしちゃえ的節操のなさが良いところでもあり悪いところでもある。といったところでしょうか。
これを期に他言語をメインにしている人もちょっとPHPを触ってみる、もしくは多言語のライブラリやツールをPHPに移植してみるというのはどうでしょうか。
この「ビジネスロジックとして」という所に個人的には違和感を感じる。フォームやビューも「都度開発」しませんか?
ですので、フォーム、バリデイト、ビューあたりもCore Concernとして捕らえる必要が有るのではないでしょうか。
何がAOPで言うCore Concernかというお話。
Blogでは結論だけ書いてある書籍と違って、こういう思考の過程を見れるところがすごい勉強になるなあと思います。
でもこの部分の意味が解らなかったので気になります。
誤解していましたが、Core ConcernとCrosscutting Concernのクラス仕様が同じであると言う点から、すべてがAOPだと言ってはいけないのですね。
ライブドア、月額525円で全国使い放題の公衆無線LANサービス—海外も視野に – CNET Japan
ライブドアは6月15日、月額525円で定額使い放題の公衆無線LAN接続サービス「D-cubic」を開始すると発表した。
7月末から無償で試験サービスを開始し、10月1日から正式サービスを始める予定だ。
山手内ほぼカバーで525円はすごいなあ。
まずは、六本木と新宿を手始めに2200カ所設置していき、10月までに東京都の山手線内ほぼ80%のエリアで利用できるようにする。
IEEE 802.16aだったら一箇所でカバーできるんじゃなかろうか。
それでさらに安くなったら嬉しい。
だとすると、mapleのすべてをフィルタで処理しようとする設計は、すべてをAOPでやろうということになってしまうのか。
おそらく、上記の遷移を扱うところが、メインのプログラムであって、それにフィルタを噛ましていくようなイメージになるのであろう。
とすると、ビューやバリデーションまでフィルタにするのはやりすぎとも言えるのではないだろうか。それらは、フィルタとは別けてコントローラのはっきりとした軸とする必要が有るだろう。
話は微妙に関係無いですが、MojaviもActionの実行自体ExecutionFilterというフィルタが行っている。はたから見ると単にFilterChainが走って終了。 何かに層を織り込むというより層だけしか無い。
Filterだと手続き的に追加していけるし入れ替えも簡単なので良いのかもしれない。
「Aが動くには先にBが動いている必要がある」みたいな前提条件を切り離す方法は無いのかな。
ワインバーグがこんなことを書いていたと記憶している。 「よい問題解決者は、大きい問題をひとつ抱えていることはない。 いつも、中くらいの問題をたくさん抱えている」
なるほど、なるほど。
一人で勝手に掲げている「名著を読む」シリーズで次はワインバーグの本を読もうと思ってるんですが、ワインバーグの本の中ではどれがいいのかな?
お勧めあったら誰か教えてください。

Mojavi Japanオープンしました!
「次の案件までにMojaviっていうのを覚えとけって言われたんだけど・・・」という人にはチュートリアルやサンプルを、使いこなしてる人には拡張クラスや関連ツールのアップロード/ダウンロードや情報交換場所として使ってもらえたらなあと思います。
第一回PHP勉強会 in Tokyo行って来ました。
PHPの濃い話がたくさん聞けてとってもためになりました!
内容はたくさんあって書ききれないですが、ためになったことメモ。(順不同)
- DI/AOP
- 配列と連想配列は同じ
- 配列の添え字はintかchar*、値はzval
- Maple, Dicon
- Ethna info(早速パクッてMojavi info作りたい)
- CatalystはRails似
- Apache + FastCGI不安定
- session_id()でホストアドレスとかくっつければ複数Webサーバセッション保存でもセッションIDかぶらない
- PHP4限定、$this経由Factoryクラス(factoryメソッドじゃなくて)
- QFのPasswordエレメント、Hiddenアスタリスク問題対応策
- 外人はConfirm(確認画面)作らない
- 日本では一時期の法律問題でConfirm作る文化がある可能性(Historical reason pattern)
- SimpleXMLはアクセスしたときオブジェクトができる
- SimpleXMLではあらかじめネームスペースを指定してから取る(=非実用的)
- Railsでmixin前提設計
- PEAR XML_Serializer不可逆シリアライズ
- GooはPHPベースが多い
- Popoon = PHP版Apache Cocoon
- Maple, Dicon, QF, DBDO, FormBuilder
DreamWeaverDWTSmartyDWTプラグイン
おれの方ではMojaviでのパターンについて話させていただきました。
ある程度の規模で開発標準を決める場合、利便性よりも「共通の決まりを使用すること」や「繰り返し使うこと」の方が重要になってきてしまいます。
Mojaviでの開発標準やコーディング規約関連が落ち着いたらRailsやSeesaa、MapleやEthnaなど試したいです。
フォワードは
$controller->forward("modName", "actName");
で、いけるのにリダイレクトは面倒。
勝手な拡張は厭なので、ヘルパクラスを作ってみました。
<?php
class URIUtil {
function redirect($modName, $actName, $opt = null) {
$params = array(MODULE_ACCESSOR => $modName, ACTION_ACCESSOR => $actName);
if (is_array($opt)) $params = array_merge($params, $opt);
Controller::redirect(Controller::genURL($params));
}
}
?>
使うほうはこんな感じで
URIUtil::redirect("modName", "actName");
URL_FORMATに依存しなくて気持ちいい!
