这篇文章介绍的内容是关于php的单例模式代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
单例模式,一个类只允许实例化一个对象,节约内存。
上代码:
<?php
header("content-type:text/html;charset=utf8");
//定义最终的单利的数据库操作类
final class db{
private static $obj = null;
//私有的数据库配置信息
private $dbhost;
private $dbname;
private $dbuser;
private $dbpass;
private $charset;
//私有的构造方法
private function __construct($conf){
$this -> dbhost = $conf['dbhost'];
$this -> dbuser = $conf['dbuser'];
$this -> dbname = $conf['dbname'];
$this -> dbpass = $conf['dbpass'];
$this -> charset = $conf['charset'];
$this->connectdb();
$this->selectdb();
$this->setcharset();
}
//私有的克隆方法
private function __clone(){}
public static function getinstance($conf){
if(!self::$obj instanceof self){
self::$obj = new self($conf);
}
return self::$obj;
}
//私有的连接数据库方法
private function connectdb(){
if(!@mysql_connect($this->dbhost,$this->dbuser,$this->dbpass)){
die('php连接mysql出错');
}
}
//私有的选择数据库方法
private function selectdb(){
if(!mysql_select_db($this->dbname)){
die('连接数据库出错');
}
}
//私有的选择字符集方法
private function setcharset(){
mysql_set_charset($this->charset);
}
//将sql语句分为两类,返回结果集和返回布尔值
//返回布尔值
public function exec($sql){
//将sql语句转化为小写
$sql = strtolower($sql);
//判断是否为select语句
if(substr($sql,0,6) == 'select'){
die('不能执行select语句');
}
return mysql_query($sql);
}
//私有的执行select语句(结果集不能直接展示给前端,得经过处理返给对象)
private function query($sql){
//将sql语句转化为小写
$sql = strtolower($sql);
//判断是否为select语句
if(substr($sql,0,6) != 'select'){
die('只能执行select语句');
}
return mysql_query($sql);
}
//将查询到的结果集返回给前端(返回一条)
public function fetchone($sql,$type=3){
$res = $this ->query($sql);
$types = array(
1 => mysql_num,
2 => mysql_assoc,
3 => mysql_both,
);
//返回一条记录
return mysql_fetch_array($res,$types[$type]);
}
//将查询到的结果集返回给前端(返回多条)
public function fetchall($sql,$type=2){
$res = $this ->query($sql);
$types = array(
1 => mysql_num,
2 => mysql_assoc,
3 => mysql_both,
);
while($row = mysql_fetch_array($res,$types[$type])){
$arr[] = $row;
}
return $arr;
}
//公共的获取记录数的方法
public function getcount($sql){
$res= $this ->query($sql);
return mysql_num_rows($res);
}
}
测试代码:
<?php
header("content-type:text/html;charset=utf8");
//类的自动加载
spl_autoload_register(function ($classname){
$arr = array(
"./libs/{$classname}.class.php",
);
foreach($arr as $path){
if(file_exists($path)){
require_once($path);
}
}
});
$arr = array(
'dbhost' => 'localhost',
'dbuser' => 'root',
'dbpass' => 'root',
'dbname' => 'test',
'charset' => 'utf8',
);
$db = db::getinstance($arr);
$sql = "select * from account where id = 100;";
var_dump($db->fetchone($sql,2));
以上就是php的单例模式代码的详细内容。