タグ

ブックマーク / blog.xole.net (9)

  • ハタさんのブログ : new self(), new parent()

    PHP5.1(PHP5.0から?)は自分自身を示すときはselfを使うことができる。 これは自分自身のインスタンスもこれで作ることができる <?php class MyClass { private static $INSTANCE = null; protected $message; private function __construct(){ $this->message = __CLASS__; } public function getMessage(){ return $this->message; } public static function getInstance(){ if(self::$INSTANCE === null){ self::$INSTANCE = new self(); } return self::$INSTANCE; } } class Sub

    matsutakegohan1
    matsutakegohan1 2008/06/30
    php5のインスタンス周り、この辺をややこしくする理由がいまだにわからない僕ちゃんへたれ。どんな実装のためにこういう表記を許可しているのだろう。
  • ハタさんのブログ : デザパタ本には載らないデザパタ

    突然ですが、きっとあなたも使っているデザインパターンシリーズ 何気なく書いていたあのクラスが無意識的にNullObjectパターンやHook Operationパターンを適用していることがここ最近多い気がしませんか? 僕の場合はS2Daoを通して見付けた(身に着けた)ものが多いんですが、今回はそのS2Daoより、簡単に書けるHook OperationパターンとNullObjectパターンをPHP5で書いてみます。 Hook Operationパターン 「Hook Operationパターン」にも書かれていますが、あるクラスの処理の前と後ろに、別の処理を実行したいことがあります。 AOPとか特別なことはせずに、あるクラスの前処理と後処理を呼び出します。 あるクラスの処理を「Process」クラスの「execute」処理とし、別の処理(前・後)は「Hook」インタフェースを実装するクラス

  • ハタさんのブログ : PHPで並行処理

    PHPというか、PHP + Unixでやってみる並行プログラミングシリーズ ググってみてもKoshigoeBLOG: PHPで並列処理や個人的なメモと備忘録 2003年 11月くらいしかヒットしないPHPのプロセス制御(pcntl)をやってみるテスト。 JavaをパクってThreadクラスとRunnableインタフェースを書いてみた。(正確にはProcessクラス?) interface Runnable { public function run(); } abstract class Thread implements Runnable { private $status; private $isRunning = false; public function __construct(){ } public function __destuct(){ // callee, exitti

  • ハタさんのブログ : ticksを使ったなんちゃってsynchronized

    PHPというか、PHP + Unixでやってみる並行プログラミングシリーズ これまた、ticksの説明が? PHPのtickってなに?くらいしか見つからなかったけど、ticksでsynchronizedっぽくしてみるテスト たぶん、ticksってPHP内部で発生するイベントの事だと思うんで、とりあえず、簡単なコード function hello(){ echo "hello", PHP_EOL; } register_tick_function("hello"); declare(ticks = 1){ echo "hoge1", PHP_EOL; echo "hoge2", PHP_EOL; echo "hoge3", PHP_EOL; echo "hoge4", PHP_EOL; echo "hoge5", PHP_EOL; } echo "---------------", PHP_

  • ハタさんのブログ : Javascriptによる大規模開発の覚え書き

    未だに半年前のエントリにブクマされるみたいなので、もう少しjavascriptについて書いてみる。 今回は大規模化開発におけるJavascriptの注意点とかそういうの。当てはまらない環境の方もいます。(しかも基的な事だらけで大したことは書いてないです) ほぼリッチクライアントを主目的としたjavascripterとコードを対象とします。 どちらかというと、ライブラリを提供する側の視点から 1.ログを出力せよ あなたが書いたコードは遅い、と必ず言われます。なので言われる前から、自分の書いたコードの処理時間をログするようにしましょう。 次のような処理時間を計測するロガーを作ります。 var TraceLog = function (){ this.startTime = -1; var outer = document.getElementById('_outer'); if(oute

  • ハタさんのブログ : Javascriptによる大規模開発の覚え書き。高速化編

    前回書いた「Javascriptによる大規模開発の覚え書き」が凄いことになってました。 今回は、省略した「5.高速化せよ」について書きます。 僕にとってjavascriptは非常に高速な言語です。それは何が高速か 開発速度が高速である 開発速度、及びそこに至るまでの修得速度はとても高速です。動的言語を上手く操る開発者はもちろん、開発に不慣れな(言葉が悪いけど)新人達でさえ「動く」モノをサクっと作ってしまえる。 また、プラットフォーム(? というかブラウザ)が広く普及しているので、ググればスグに問題解決もできる。 それにローカルで簡単に作れる。javascript、それは動作環境を含めて高速です。 高速にUI操作ができる(UI操作が非常に簡単である) swingとかでUI操作をするには多くのオブジェクト操作をしなければならないけど、javascript(もといDHTML)は非常に簡単に

  • ハタさんのブログ : PHP開発者のためのデザインパターン。の閑話

    はてなPHP keywordを付けているところを眺めていたら、僕と同じようにデザインパターンを実践している人がいた。参考にしよう ref - ルーで一気にクマー デザパタについては以前「デザパタには載らないデザパタ」にも書いたことあったけど、GoFとかJ2EEとかPofEAA(これはちょっと大きいか)で色んなパターンが転がってるけど、実際にやっていることは、「同じような実装を2度も書きたくない」から、書きやすく整理する手法をパターンっていってるんだなーと思う。 んで、ここはid:shimookaが上手いことまとめてくれていて、突き詰めれば勝手にデザパタされるんじゃないかと。 (中略) 僕なんかは、もともとjavaで一定のプログラミング設計(?)とかインタフェースについて見てきた(Seasar含めて)からinterfaceみたいなものが大好きなんだけど、んなもんいらん!実装クラスだけで

    matsutakegohan1
    matsutakegohan1 2008/06/30
    わしのデザインパターンは108つまであるそうです。
  • ハタさんのブログ : jsではDelegateはどう実装するのか

    ポスト @ 2:39:09 , 修正 @ 2007/11/08 2:40:34 | javascript     jsのapplyとかcallってメソッドで、メソッドの実行を委譲できるけど、上手く使う方法が思い浮かばない 以下は、Function.prototype.delegateって作って、function to function でdelgate Function.prototype.delegate = function(delegateFor){ return delegateFor.apply(null, arguments); }; var Hoge = function(){ this.open = function (){ return 'this is Hoge#open'; }; this.close = function (){ return '

  • ハタさんのブログ(復刻版) : javascriptを初めて学ぶ人についてのおさらい。その1

    僕にも教える人ができた(? というか人にモノを教える立場)になったので、とりあえず、最近はもっぱらjavascriptを教えています。 もともとCやJavaなどについてはある程度の知識がある人なので、それを少しjs的な意味で、関数言語的な教えをやっている最中のメモ 変数って何ですか?変数って値もしくは式そのものに利便的な名前をつけているものです 次のhogeとfooは値をいれる箱ではなく、値そのものに別名(もしくは分かりやすい名称)を割り当てているだけに過ぎませんよ。 var hoge = 1; var foo = [1, 2, 3]; alert(hoge + 1); // 2 alert(foo[0]); // 1 alert(1 + 1); // 2 alert([1, 2, 3][0]); // 1 つまり、関数自体を変数に代入する事ができます。(functionとは特別な呼び名

  • 1