PHPのrequireで良く判らない挙動をしたのでブログで取り上げてみます。
ちなみに原因も解決策もハッキリしていません。。
誰か知ってたら教えて下さいまし。。

Hoge.php


<?php

// クラス定義の前に、クラスの有無を判定する。
// 結果:true
var_dump(class_exists('Hoge'));

// クラスの定義
class Hoge {}

上記の様にクラス定義の前にクラスの有無を判定した場合、
そのクラスは存在すると解釈されておるのですが、
サブクラスを作成した場合は、そうでもなさそうなのです。。

SuperClass.php


<?php

// クラス定義の前に、クラスの有無を判定する。
// 結果:true
var_dump(class_exists('SuperClass'));

// 親クラスの定義
class SuperClass {}

SubClass.php


<?php

// 親クラスが定義されているファイルを読み込む。
require_once 'SuperClass.php';

// クラス定義の前に、クラスの有無を判定する。
// 結果:false
var_dump(class_exists('SubClass'));

// 小クラスの定義
class SubClass extends SuperClass {}

なんとまあ、サブクラスが定義されていない事になってるじゃありませんか。。
何なんだろうと思ったので、ひとまず親クラスの継承を取っ払ってみる事に。

SuperClass.php


<?php

// 結果:true
var_dump(class_exists('SuperClass'));

class SuperClass {}

SubClass.php


<?php

require_once 'SuperClass.php';

// 結果:true
var_dump(class_exists('SubClass'));

class SubClass {}

なんだかやっぱり継承すると駄目になるみたいです。
そこで、上記のファイルを1つのファイルにまとめてみました。


<?php

// 結果:true
var_dump(class_exists('SuperClass'));

class SuperClass {}

// 結果:true
var_dump(class_exists('SubClass'));

class SubClass extends SuperClass {}

これだと、両方とも定義されている事になっている様です。
なんでだろう。。

requrireって記述した所にごっそり書き加えられるイメージ(飽くまでイメージ)
で使ってたんだけどこの挙動を見る限りでは、そうではないみたいですね。

ちなみに、小クラスの定義の後にクラスの有無を判定すると、クラスは存在している様です。

SuperClass.php


<?php

// 結果:true
var_dump(class_exists('SuperClass'));

class SuperClass {}

SubClass.php


<?php

require_once 'SuperClass.php';

class SubClass extends SuperClass {}

// 結果:true
var_dump(class_exists('SubClass'));

なんでこうなるか、理由知っている人いたら教えてください。。

GoogleやらYahooやらの大手検索エンジンは
もう当たり前の様になっていますねサジェスト機能。

さてさて、今やサジェスト機能は結構いろんな所に実装されているみたいです。
いつの間にやらGOOにも実装されてましたね。
それぞれ実装方法は異なるだろうし、どんなキーワードに強いとかあるのかも知れませんが
いろんな所のサジェストを見比べたりするのも面白うだなあーと言う事で、
1つお遊びでサイトを作ってみました。
まあ、2chのまとめサイト見てて感化されたんですけれども。。

色んなところからサジェストしてくる「Xooo」

Web上にちらほらとサジェストに関する情報があったので参考にしてみました。
以下のサイトはFireFoxの検索バーにサジェストを実装する方法なのですが、
要はクエリー投げてるだけなので、JavaScriptで取ってくる様にしただけ。
Googleとかもそういう風にやってます。
当たり前だけれども。

[Firefoxの検索バーにサジェスト(入力補助)機能を追加する方法]

とりあえず、各検索エンジンからサジェストを取ってくるURLは以下の通り。

[Google]
http://www.google.co.jp/complete/search?hl=ja&output=firefox&client=firefox&q=hoge

[Yahoo]
http://asprov.search.yahoo.co.jp/AssistSearchService/V2/webassistSearch?output=fxjson&p=hoge

[Amazon]
http://completion.amazon.co.jp/search/complete?mkt=6&method=completion&search-alias=aps&q=hoge

[Wikipedia]
http://ja.wikipedia.org/w/api.php?action=opensearch&search=hoge

[YouTube]
http://suggestqueries.google.com/complete/search?hl=ja&client=firefox&hjson=t&ds=yt&q=hoge

[fooooo]
http://www.fooooo.com/word.php?q=hoge

[Goo]
http://suggest.search.goo.ne.jp/suggest/selall.php?num=5&MT=hoge

色んな所のサジェストを見てると、結果がJSONPだったりXMLだったり
HTMLの一部だったりと統一感がなかったので、結果を全てPHPでJSONに
直してからJavaScriptで読み込ませる様にしました。
HTMLの一部で返ってくるやつは内部で無理矢理XHTMLを作ってXMLとしてパース。

細かいパラメーターの内容とか実は全然よくわかってないんですけれども、
Googleの「client=firefox」を別の値に変えてあげるとJSONPで取れたりとかするみたいです。
パラメーター周りをまとめてくれているサイトはどっかにないものかしら。。

2009/12/29 19:29:33

Wordpressの可能性

アフィリエイトサイトをどうやって作ろうかなーと考えて思った事。

ブログツールとしてとても高性能なWordpressですが、
フレームワークっぽい使い方としても結構使えるんじゃないかって思った。
フレームワークって言い方は正しくないとは思うけれども。。

とりあえず、プラグインとWidgetが強力過ぎて素敵。
当たり前だけどシステムのアーキテクトな部分を心配せずに
ごりごりロジック部分を開発出来るのは開発意欲が湧くよね。

RSSのパース機能も標準で備わってるみたいだし、
RSS配信してるサイトのまとめサイト的な物は簡単に作れるんじゃないかな、と。
Pearとかで提供されてるモジュール使えばいいじゃんって気もしないでもないけど。

ひとまず、こういう使い方でどういう可能性があるのかを模索するのも
非情に有益なんじゃないかなーと思う訳です。