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;
}
}
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;
}
}
但是在require_once('a.php')中
但是static $a还是会destruct,是为什么?
你的destruct是什么意思
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();
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,只有一次的初使化.
-----------------
这是当然的,页面解释完了就意味着程序终止了,所有的变量当然都被释放了。
http协议和这一点没关系的.关于好处,软件工程里不是有Singleton吗?Singleton的好处就是他的好处.java,c++都可以很轻松的实现.gdj的序列化的确有点得不尝失.
php工作与web方式,而http协议是无状态协议。由此决定了php不需要持久对象
java,c++都可以工作在桌面方式,所以可以有持久对象。不过我若启动两个java,c++应用时,持久对象还有效吗?
你也看到了,php也是可以轻松实现的,只是它和java,C++的语言工作方式不同,脚本语言都是为http协议服务的,怎么会和http协议没关系呢?就如唠叨所说,每一次http请求都相当于运行一个php程序,一个程序结束了,变量还会存在吗?我想java和c++也是这样吧。