搭建好php開發(fā)環(huán)境,這個就不多講了,能找單例模式的應該有一定的php基礎
在盧龍等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供做網(wǎng)站、網(wǎng)站制作 網(wǎng)站設計制作按需制作,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,高端網(wǎng)站設計,全網(wǎng)營銷推廣,外貿網(wǎng)站建設,盧龍網(wǎng)站建設費用合理。
2
新建一個database.php文件存放數(shù)據(jù)庫信息
?php
$db = array(
'host'='localhost',//地址
'user'='root',//數(shù)據(jù)庫用戶名
'password'='root',//數(shù)據(jù)庫密碼
'database'='ceshi',//數(shù)據(jù)庫名
)
?
3
新建Mysql.class.php編寫數(shù)據(jù)庫連接類操作類添加需要的屬性和構造方法
構造函數(shù)加載數(shù)據(jù)庫配置文件連接數(shù)據(jù)庫
?php
class db {
public $conn;
public static $sql;
public static $instance=null;
private function __construct(){
require_once('database.php');
$this-conn = mysqli_connect($db['host'],$db['user'],$db['password']);
if(!mysqli_select_db($this-conn,$db['database'])){
echo "失敗";
};
mysqli_query($this-conn,'set names utf8');
}
}
?這樣試試吧如果你對php這類有興趣的話,可以和我一樣在后盾人經(jīng)??纯唇滩?,自己多看幾遍,慢慢的以后就明白了,希望能幫到你,給個采納吧謝謝
PHP單例模式,就是一個對象只被生成一次,但該對象可以被其它眾多對象使用。單例模式使用最多的場景,是數(shù)據(jù)庫連接操作。我們知道,生成一個對象的操作是用new函數(shù)來實現(xiàn),但是new對象都會消耗內存,而且有時候對同一個對象,在不同文件中可能會生成多次,這就造成了系統(tǒng)資源的浪費。然而使用單例模式,則可以很好的避免這種情況。
以數(shù)據(jù)庫為例,假設我們有一個數(shù)據(jù)庫的類,要實現(xiàn)數(shù)據(jù)庫連接。如果不使用單例模式,那么在很多PHP文件中,我們可能到要創(chuàng)建這樣的一個連接,這其實是對資源的很大浪費。那么下面介紹單例模式實現(xiàn)方法:
class?Database
{
//定義一個屬性,該屬性是靜態(tài)的保護或私有屬性
protected?static?$db;
//這里構造函數(shù)一定要是私有方法
private?function?__construct()
{??
}
//聲明一個獲取類實例的方法
static?function?getInstace()
{??
if(self::$db)?{
return?self::$db;
}else?{
//生成自己
self::$db?=?new?self();
return?self::$db;
}??
}
}
//錯誤調用方法
//用new實例化private標記構造函數(shù)的類會報錯
$db?=?new?Database();
//正確獲取實例方法
$db?=?Database::getInstace();
使用單例模式的好處是,當你在其他地方也要使用到這個類,比如上面的數(shù)據(jù)庫類。那么你可以在其它地方直接調用?Database::getInstace(),而且該實例只會被生成一次,不會被重復生成,所以不會浪費系統(tǒng)資源。
簡單的說,單例模式生成的實例只被生成一次,而且只負責一個特定的任務。
使用單例模式有下面幾個要求:
1.構造函數(shù)需要標記為private(訪問控制:防止外部代碼使用new操作符創(chuàng)建對象),單例類不能在其他類中實例化,只能被其自身實例化;
2.擁有一個保存類的實例的靜態(tài)成員變量;
3.擁有一個訪問這個實例的公共的靜態(tài)方法(常用getInstance()方法進行實例化單例類,通過instanceof操作符可以檢測到類是否已經(jīng)被實例化);
4.如果嚴謹?shù)脑?,還需要創(chuàng)建__clone()方法防止對象被復制(克?。?我上面沒創(chuàng)建)
使用單例模式好處,總結:
1、php的應用主要在于數(shù)據(jù)庫應用, 所以一個應用中會存在大量的數(shù)據(jù)庫操作, 使用單例模式, 則可以避免大量的new 操作消耗的資源。
2、如果系統(tǒng)中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現(xiàn). 這個可以參看ZF的FrontController部分。
3、在一次頁面請求中, 便于進行調試。
參考:
單例模式確保某個類只有一個實例
1.只能有一個實例。
2.必須自行創(chuàng)建這個實例。
3.必須給其他對象提供這一實例。
那么為什么要使用PHP單例模式?
PHP一個主要應用場合就是應用程序與數(shù)據(jù)庫打交道的場景,在一個應用中會存在大量的數(shù)據(jù)庫操作,針對數(shù)據(jù)庫句柄連接數(shù)據(jù)庫的行為,使用單例模式可以避免大量的new操作。因為每一次new操作都會消耗系統(tǒng)和內存的資源。
優(yōu)點:
1. 改進系統(tǒng)的設計
2. 是對全局變量的一種改進
缺點:
1. 難于調試
2. 隱藏的依賴關系
3. 無法用錯誤類型的數(shù)據(jù)覆寫一個單例
本文實例講述了PHP基于單例模式實現(xiàn)的數(shù)據(jù)庫操作基類。分享給大家供大家參考,具體如下:
配置文件:
?php
$db
=
array(
'host'='localhost',
'user'='root',
'password'='',
'database'='test',
)
?
php
數(shù)據(jù)庫基類:
?php
class
db
{
public
$conn;
public
static
$sql;
public
static
$instance=null;
private
function
__construct(){
require_once('db.config.php');
$this-conn
=
mysql_connect($db['host'],$db['user'],$db['password']);
if(!mysql_select_db($db['database'],$this-conn)){
echo
"失敗";
};
mysql_query('set
names
utf8',$this-conn);
}
public
static
function
getInstance(){
if(is_null(self::$instance)){
self::$instance
=
new
db;
}
return
self::$instance;
}
/**
*
查詢數(shù)據(jù)庫
*/
public
function
select($table,$condition=array(),$field
=
array()){
$where='';
if(!empty($condition)){
foreach($condition
as
$k=$v){
$where.=$k."='".$v."'
and
";
}
$where='where
'.$where
.'1=1';
}
$fieldstr
=
'';
if(!empty($field)){
foreach($field
as
$k=$v){
$fieldstr.=
$v.',';
}
$fieldstr
=
rtrim($fieldstr,',');
}else{
$fieldstr
=
'*';
}
self::$sql
=
"select
{$fieldstr}
from
{$table}
{$where}";
$result=mysql_query(self::$sql,$this-conn);
$resuleRow
=
array();
$i
=
0;
while($row=mysql_fetch_assoc($result)){
foreach($row
as
$k=$v){
$resuleRow[$i][$k]
=
$v;
}
$i++;
}
return
$resuleRow;
}
/**
*
添加一條記錄
*/
public
function
insert($table,$data){
$values
=
'';
$datas
=
'';
foreach($data
as
$k=$v){
$values.=$k.',';
$datas.="'$v'".',';
}
$values
=
rtrim($values,',');
$datas
=
rtrim($datas,',');
self::$sql
=
"INSERT
INTO
{$table}
({$values})
VALUES
({$datas})";
if(mysql_query(self::$sql)){
return
mysql_insert_id();
}else{
return
false;
};
}
/**
*
修改一條記錄
*/
public
function
update($table,$data,$condition=array()){
$where='';
if(!empty($condition)){
foreach($condition
as
$k=$v){
$where.=$k."='".$v."'
and
";
}
$where='where
'.$where
.'1=1';
}
$updatastr
=
'';
if(!empty($data)){
foreach($data
as
$k=$v){
$updatastr.=
$k."='".$v."',";
}
$updatastr
=
'set
'.rtrim($updatastr,',');
}
self::$sql
=
"update
{$table}
{$updatastr}
{$where}";
return
mysql_query(self::$sql);
}
/**
*
刪除記錄
*/
public
function
delete($table,$condition){
$where='';
if(!empty($condition)){
foreach($condition
as
$k=$v){
$where.=$k."='".$v."'
and
";
}
$where='where
'.$where
.'1=1';
}
self::$sql
=
"delete
from
{$table}
{$where}";
return
mysql_query(self::$sql);
}
public
static
function
getLastSql(){
echo
self::$sql;
}
}
$db
=
db::getInstance();
//$list
=
$db-select('demo',array('name'='tom','password'='ds'),array('name','password'));
//echo
$db-insert('demo',array('name'='腳本之家','password'='123'));
//echo
$db-update('demo',array("name"='xxx',"password"='123'),array('id'=1));
echo
$db-delete('demo',array('id'='2'));
db::getLastSql();
echo
"pre";
?
更多關于PHP操作數(shù)據(jù)庫相關內容感興趣的讀者可查看本站專題:《php+mysql數(shù)據(jù)庫操作入門教程》、《PHP基于pdo操作數(shù)據(jù)庫技巧總結》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
本篇文章是對php設計模式中的單例與多例設計模式的應用進行了詳細的分析介紹 需要的朋友參考下 ?
單例(Singleton)模式和不常見的多例(Multiton)模式控制著應用程序中類的數(shù)量 如模式名稱 單例只能實例化一次 只有一個對象 多例模式可以多次實例化 基于Singleton的特性 我們經(jīng)常用Singleton配置應用程序并定義應用程序中可能隨時訪問的變量 但有時并不推薦使用Singleton 因為它生成了一個全局狀態(tài)且 該單一根對象沒有封裝任何系統(tǒng)功能 多數(shù)情況下 會使單元測試和調試變得困難 讀者根據(jù)情況自行決定 代碼示例
復制代碼 代碼如下: ?php class SingletonExample{ private function __construct(){}//防止直接實例化 public static function getInstance(){ //不與任何對象有關聯(lián) static $instance=null; //調用此函數(shù)的所有代碼共享該變量 不必要讓其是類的靜態(tài)變量 if($instance==null){ $instance=new SingletonExample(); } return $instance; } } $obj =SingletonExample::getInstance(); $obj =SingletonExample::getInstance(); var_dump($obj ===$obj );// true 是同一個實例 ?
Multiton與singleton相似 不同的是后者需要getInstance()函數(shù)傳遞關鍵值 對于給定的關鍵值只會存在唯一的對象實例 如果有多個節(jié)點 每個節(jié)點擁有唯一的表識符 且各個節(jié)點在某單次執(zhí)行(如cms里的節(jié)點)可能出現(xiàn)多次 那么就可以用Multiton模式實現(xiàn)這些節(jié)點啊 Multiton節(jié)省內存 并確保同一個對象的多個實例不發(fā)生沖突 示例
復制代碼 代碼如下: lishixinzhi/Article/program/PHP/201311/21166
當然是重新連接了,你是跳轉不是包含。
跳轉兩者之間共享值要專門的傳值操作,cookie\
session\
POST/GET
\靜態(tài)輸出
網(wǎng)頁名稱:php數(shù)據(jù)庫單例 PHP常用的數(shù)據(jù)庫是
分享地址:http://muchs.cn/article24/hjdpce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、Google、面包屑導航、、網(wǎng)站策劃、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)