memo/20111128
created 2011-11-28 modified 2011-11-28
ふむ、php5では変数にクラス名を代入して、その変数を指定してオブジェクトを作成できることが、仕様として明確になったようだ。
以前調べたとき、php4ではマニュアルに「動作未定義」と書かれているものの、ちゃんと動く、という状態だったと記憶していたのだが、いま調べたらphp4のマニュアルには"ユーザ記述"として、できるよ、と書いてあった。
話題飛ぶが、phpでコールバックイベントループを実装できるか試してみた。単に登録してコールバック起動するだけはできた。
コールバックを起動するには、
イベントのリストは、単にarrayを使ってやればよくて、
あとは
$gイベントリスト はグローバルで大丈夫か検討しよう。
タイマイベント のウェイトどうしようかな。
ただし基本、phpって1コール1応答モデルだから...意味無いのかな。もし、クライアントに応答を先に返して、サーバ側は内部処理を続ける、ってなことをやるにはいいかもだけど。
セッションオブジェクト上にイベントリストを持てば?と思ったけど、そうすると多重呼びの管理をしないといけない。
うーむ。
さらに話題飛ぶが、phpでは日本語識別子(UTF-8)が普通に動くようだ。
$name = "MyClassName"; $obj = new $MyClassName();
以前調べたとき、php4ではマニュアルに「動作未定義」と書かれているものの、ちゃんと動く、という状態だったと記憶していたのだが、いま調べたらphp4のマニュアルには"ユーザ記述"として、できるよ、と書いてあった。
| リンク | 備考 |
|---|---|
| http://www.php.net/manual/ja/language.oop5.basic.php | PHP5 |
| http://www.php.net/manual/ja/keyword.class.php | PHP4 |
話題飛ぶが、phpでコールバックイベントループを実装できるか試してみた。単に登録してコールバック起動するだけはできた。
コールバックを起動するには、
call_user_func(array($オブジェクト, $メソッド名文字列) 【,$パラメータ1【,...】】);でいけるようだ。
| リンク | |
|---|---|
| http://php.net/manual/ja/function.call-user-func.php | PHP5 |
イベントのリストは、単にarrayを使ってやればよくて、
//イベントリストの初期化はグローバルで $gイベントリスト = array();
//イベント構造体をこんな風に定義して
class イベント
{
var $時刻_;
var $オブジェクト_;
var $メソッド名_;
function __construct($時刻, $オブジェクト, $メソッド名)
{
$this->時刻_ = $時刻;
$this->オブジェクト_ = $オブジェクト;
$this->メソッド名_ = $メソッド名;
}
}
//登録するときは ... global $gイベントリスト; array_push($gイベントリスト, new イベント(0, $オブジェクト, $メソッド名));
//取り出しと実行 ループ は
...
global $gイベントリスト;
while (count($gイベントリスト) > 0) {
$先頭 = array_shift($gイベントリスト);
call_user_func(array($先頭->オブジェクト_, $先頭->メソッド名_)); //引数なし
$先頭 = null;
}
こんな感じでいけた。あとは
$gイベントリスト はグローバルで大丈夫か検討しよう。
タイマイベント のウェイトどうしようかな。
ただし基本、phpって1コール1応答モデルだから...意味無いのかな。もし、クライアントに応答を先に返して、サーバ側は内部処理を続ける、ってなことをやるにはいいかもだけど。
セッションオブジェクト上にイベントリストを持てば?と思ったけど、そうすると多重呼びの管理をしないといけない。
うーむ。
さらに話題飛ぶが、phpでは日本語識別子(UTF-8)が普通に動くようだ。