vb.netで何年も働いた後、私はちょうどphpに飛び込み始めています。
webapp でシングルオンとして実行されるロガー クラスを書きたいと思います。コードは次のとおりです。
class cLog{
private $data = NULL;
static private $instance = NULL;
static public function getInstance(){
if(self::$instance == NULL){
echo "empty!";
self::$instance = new cLog();
}
return self::$instance;
}
private function __construct(){
}
private function __clone(){
}
public function getData(){
return self::getInstance()->data;
}
public function trace($o){
self::getInstance()->data[] = $o;
}
}
私が期待しているのは、cLog::trace() メソッドを複数回呼び出すアプリケーションのページを切り替えると、データ配列が増加し、すべてのトレースでいっぱいになることです。しかし、私が得たのは、ページを実行するたびに $instance がnullであるため、オブジェクトが再起動することです(ご覧のとおり、インスタンスゲッターにエコー「空!」行を入れました:毎回表示されます)
私はphpアプリケーションライフサイクルで誤解しているものがあると思います....
ここに使用例があります:
cLog::getInstance()->trace("hello world");
$logs = cLog::getInstance()->getData();
ありがとう