class A {
var $content='hello';
private static $a;
public static function getInstance() {
if( !self::$a ) self::$a = new A();
                  return self::$a;
}
public function show() {
echo $this->content;
}
}

解决方案 »

  1.   

    谢谢楼上指点,
    但是在require_once('a.php')中
    但是static $a还是会destruct,是为什么?
      

  2.   

    不可能的
    你的destruct是什么意思
      

  3.   

    有点搞不懂楼主想知道的是什么 来自ZEND框架的一段代码
    static public function getInstance()
    {
            if (!self::$_instance instanceof self) {
               self::$_instance = new self();
            }        return self::$_instance;
    }
    使用
    $controller = Zend_Controller_Front::getInstance();
    相当于
    $controller = new Zend_Controller_Front();
      

  4.   

    谢谢大家指点,但我还有解瘳.我详细的说明一下我现在的状况://文件 a.php
    class A {
    var $content='hello';
    private static $a;
    function __construct() {
    echo $this.' construct'.'<br>';
    }
    function __destruct() { 
    echo $this.' destruct'.'<br>';
    }
    public static function& getInstance() {
    if( !self::$a ) {
    self::$a = new A();
    echo self::$a.' init'.'<br>';
    //很复杂的对self::$a的设置过程
    }
    return self::$a;
    }
    public function show() {
    echo $this->content;
    }
    }//文件test.php
    require_once('a.php');
    A::getInstance()->show();
    //结果
    访问test.php得到输出是:
    Object id #1 construct
    Object id #1 init
    hello
    Object id #1 destruct即我每次对test.php访问时都会重新建立一个self::$a
    我想使A成为Singleton,只有一次的初使化.
      

  5.   

    即我每次对test.php访问时都会重新建立一个self::$a
    -----------------
    这是当然的,页面解释完了就意味着程序终止了,所有的变量当然都被释放了。
      

  6.   

    那怎么办?我只想一次初使化,如果每次都要初使化就效率太低了.以后只要调用function refresh()只作少量更新.
      

  7.   

    现在明白了 楼主想把某个程序长驻内存 用PHP可以说是可以的 可以通过其他方法实现 但这么做有什么好处呢?
      

  8.   

    php没有好的办法将结构长驻内存。php要长驻内存只能是大量字符型的。结构型的除非你将之serialize,但那样的效率也不会高得了什么,反而要大耗资源。
      

  9.   

    回 ice_berg16(寻梦的稻草人):
    http协议和这一点没关系的.关于好处,软件工程里不是有Singleton吗?Singleton的好处就是他的好处.java,c++都可以很轻松的实现.gdj的序列化的确有点得不尝失.
      

  10.   

    “http协议和这一点没关系的”—— 否
    php工作与web方式,而http协议是无状态协议。由此决定了php不需要持久对象
    java,c++都可以工作在桌面方式,所以可以有持久对象。不过我若启动两个java,c++应用时,持久对象还有效吗?
      

  11.   

    关于好处,软件工程里不是有Singleton吗?Singleton的好处就是他的好处.java,c++都可以很轻松的实现.gdj的序列化的确有点得不尝失.---------------------
    你也看到了,php也是可以轻松实现的,只是它和java,C++的语言工作方式不同,脚本语言都是为http协议服务的,怎么会和http协议没关系呢?就如唠叨所说,每一次http请求都相当于运行一个php程序,一个程序结束了,变量还会存在吗?我想java和c++也是这样吧。