PHP的单态设计模式

对php单态设计模式不怎么理解,能用通俗的例子讲解讲解吗? 谢谢!

对于java转过来程序员说是单态设计模式,在PHP上通常说是单例模式,说法不一样,手册上也有介绍:

单例模式(Singleton)用于为一个类生成一个唯一的对象。最常用的地方是数据库连接。 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
<?php
class Example
{
// 保存类实例在此属性中
private static $instance;

// 构造方法声明为private,防止直接创建对象
private function __construct()
{
echo 'I am constructed';
}

// singleton 方法
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}

return self::$instance;
}

// Example类中的普通方法
public function bark()
{
echo 'Woof!';
}

// 阻止用户复制对象实例
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}

}

?>

这样我们可以得到一个独一无二的Example类的对象。
<?php

// 这个写法会出错,因为构造方法被声明为private
$test = new Example;

// 下面将得到Example类的单例对象
$test = Example::singleton();
$test->bark();

// 复制对象将导致一个E_USER_ERROR.
$test_clone = clone $test;
?>
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-31
给你个代码看下吧。更直观一些
<?php
class db
{
private static $instance=false;
public static function instance($host,$name,$pass,$dbname)
{
if(self::$instance===false)
{
self::$instance=new db(......);
}
return self::$instance;
} private function __construct()
{
/*这个函数必须是私有的,它保证了只能通过单例生成器来获得实例*/
} public function __clone()
{
/*什么也不做*/
}
}
?> 外部调用的时候,调用那个instance函数 ,以保证他的唯一性
相似回答