SINCE : 2001.05.29
MOVED INTO HERE : 2006.01.01
遊星ゲームズ
FrontPage | RSS


2008/02/11 17:55

SQLite Manager……Firefoxプラグイン
 日記

 SQLiteを管理するためのソフトにはなかなかろくなものがなくて、これはいかにSQLiteが軽視されているかという現状をあらわしている気がするわけです。SQLiteだけでもかなりのものが作れると思うがなあ。世の中、軽量で便利で無料ならいいというものでもない。
 で、最近見つけたSQLite管理ソフト。

 UTF-8を使う限り、これがいままでで一番よさげ。
 問題は、これがなんでFirefoxプラグインなのかさっぱりわからないところだ(笑)


2008/02/10 18:16

PHPで仕事をするときの注意点
 日記

 いってることはほとんど正しいと思うけど、これは「PHPで仕事をするときの注意点」じゃないな。
 フレームワークとかクラスとか、そんな話が出てきてる時点ですでに少しレベルが違うと思った(orz)。

 注意すべき項目を挙げておこう。

register_globals、magic_quotesはオフにする。

 たしかに、内容を知ってればなにをさしおいてもオフにすべき。まともな神経の持ち主ならオンにはできないはず。だが、オンになってる環境がどんだけあるか……。

プレゼンテーションとロジックを分割すること。プレゼンテーションには変数または関数の出力とループ以外のロジックを残さないこと。ロジックの中で直接出力をしないこと。ロジックはSimpleTestを使って単体テストすること。

 プレゼンテーションとロジックの境界線がどこにあるのかを明確に判断できる技術者はほとんどいない。だから現実には、いっそのことプレゼンテーション層を省略したほうがまだマシというケースが多い。個人的には、それでかまわないと思う。
 DB更新処理はともかく、コード名称取得処理とかは本当にビジネスロジック層でやるべきことか? とか個人的にも疑問があるし。
 SimpleTestはもちろん絶対使ったほうがいい(となると前の文章と矛盾するけど(笑))。でも現実には、小さめのWEBサイト開発の〆切はアホみたいに早いうえ仕様変更が多すぎてその暇がない。

 あと思うんだが。
 ビジネスロジック層とプレゼンテーション層を分離しろという人はたくさんいるのに、データアクセス層を分離しろという人が少ないのはなんで?
 そっちのほうが明確に分離できるしメリットも大きい気がするんだが。

リクエストから取得したパラメータを出力するときはhtmlspecialcharsを使う。

 コメントにもあるようだけど。リクエストに限っちゃダメ。表示するときはあらゆる値をほぼ例外なくhtmlspecialcharsしていい。そうできないなら、設計に問題があると思う。
 あと、URLはurlencodeだけど、これもhtmlの中に表示するならhtmlspecialchars。aタグのhrefとかでもそう。

グローバル変数を使うのは避ける。
変数を定数として使わない。定数はdefineで定義するか、const宣言する。

 defineにもconstにも、スカラーしか入らない。また特にconstは、動的な記述を一切受けつけないのでけっこう厳しかったりする。

require/includeを条件文や関数宣言の中に記述しないこと。

 たしかに、とんでもないところに別ファイルを読みこんでひどいことする人はけっこういるんだけど(笑)。
 たとえば既存のテンプレートエンジンを使わない場合とか、includeを関数内に書くしかない。(fopenしてevalならいいという話でもなかろう)
 そんなわけで認めるべき例外もいくつかはあると思う。
 requireは論外。


2008/02/09 01:30

getInstanceは継承できない?
 日記

 最近JAVAやっててもどうしても納得いかないんだけど。シングルトンとかで使う静的メソッドgetInstance()を継承することはできないんである。
 getInstanceを親クラスで定義しても、それはどうあっても親クラスのメンバであって、子クラスではない。やるならクラス名を引数に渡すという、なんかどこかかっこ悪い実装をするしかない。
 PHPの話でいうなら、 return new self(); と書いたときに親クラスのインスタンスが返されてしまう。シングルトンなら必ず同じ内容のメソッドがあるのに、それは各クラスに書くしかない。
 でもしかたないのかなあ。たしかに、静的メソッドの継承を許してしまうと、っていうかそれは静的なのか?という気もするし。

 シングルトンが嫌いな人もいるという話をどこかで読んだけど、まあようするにできないということは推奨されないという解釈もできるし、そういうことなんでしょうか。
 個人的には、JAVAはともかく、PHPのようないいかげんな言語は静的メソッドの継承でもなんでもてきとうにやってしまうがいいと思う。


2008/02/05 02:18

JAVAやってて思うこと
 日記

 火星探査機のシステムを作ったときも炎上したかなあ……

 いやもちろん、JAVAそのものが悪いわけじゃないとはわかってるけど。


2008/02/03 20:40

PHPのメソッドチェイン
 日記

new Hoge()->get();

 これはエラー。なんでといわれても困る。そういうものらしい。不便だ。
 それがいやなら、しかたないから、staticメソッドでgetInstance()とかfactory()とかを必ず作っておくとか。

Hoge::getInstance()->get();

 PHP5以降。つーかこれならいいのにnewはダメというのが納得いかないけど。
 ちなみにnew系だと、関数の参照返しのときも

function &getHoge() {
return new hoge();
}

 これがNoticeになったりする。とにかくnewするときは一度変数に入れないとダメらしい。

 あと、

$hoge$_lb'piyo'$_rb->get();

 これはもちろんOK。でも

$hoge->getArray()$_lb'piyo'$_rb;

 これはエラー。
 ところがPHP5ならメソッドチェインできるから、

$hoge->getObject()->piyo;

 これなら問題ナシなのである。
 なんか納得いかないけど、このさい配列も無名オブジェクトにキャストして返すか?

return (object)array('piyo' => 'value');

 とたんに怪しいコードに。
 しかしじっさい、HTMLにPHPを埋めこむときは<?=$hoge?>形式で一行で書けなきゃ汚くなるから、実用的なテクニックになってしまいかねないのがなんとも。


FrontPageを



Copyright © 2001-2024 てらしま(terrasima @gmail.com)