单例模式
之前也有用到过单例模式,但是想了想还是想把这些都记录下来,以免忘记,哈哈,没办法,谁让宝宝是个健忘的银嘞。。。。
某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。
单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。以下代码显示了 PHP V5 中的一个数据库连接单元素。
单例类:
1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化。
2.拥有一个保存类的实例的静态成员变量
3.拥有一个访问这个实例化的公共静态方法(常用getInstance()方法进行实例化单例类,通过instance 操作符可以检测到类是否已经被实例化。
eg Singleton.php
<?php
class db{
private static $instance;
private $link;
private function __construct($hostname,$username,$pwd,$db){
$this->link=mysql_connect($hostname,$username,$pwd);
mysql_select_db($db,$this->link);
//var_dump($this->link);
if(!$this->link){
die('Could not connect: ' . mysql_error());
}
}
private function __clone(){} //防止被克隆
public static function getInstance($hostname,$username,$pwd,$db){
if(!(self::$instance instanceof self)){
self::$instance=new self($hostname,$username,$pwd,$db);
}
var_dump(self::$instance);
return self::$instance;
}
public function query ($query){
$this->query=mysql_query($query,$this->link);
return $this->query;
}
public function num_rows($query)
{
$or=$this->query($query);
return $this->result = mysql_num_rows($or);
}
}
$conn=db::getInstance("127.0.0.1",'root','','tpshop');
$sql="select * from tp_attr";
$a= $conn->num_rows($sql);
var_dump($a);