當前位置:首頁 » 編程語言 » php操作類

php操作類

發布時間: 2023-01-07 08:05:33

php資料庫操作之基於Mysqli的資料庫操作類庫

此類庫簡單、易用,便於你自己修改和對功能的改善,能解決大部分
PHP
項目中執行的
SQL
操作。
初步工作
首先,請大家下載這個類庫
M.class.php 再下載一個
Mysqli
連接資料庫的類庫
MysqliDb.class.php(打包下載地址)
新建一個
includes
文件夾,將下載下來的兩個
class
文件,放進去。
然後,請你在項目下創建一個
test.php
文件。註:UTF-8
文件格式
請先根據你機器的情況,填充以下代碼,用於連接資料庫:
復制代碼
代碼如下:
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH',
dirname(__FILE__));
define('DB_HOST',
'localhost');
//資料庫伺服器地址
define('DB_USER',
'root');
//資料庫用戶名
define('DB_PWD',
'×××');//資料庫密碼
define('DB_NAME',
'×××');
//資料庫名稱
define('DB_PORT',
'3306');
//資料庫埠
function
__autoload($className)
{

require_once
ROOT_PATH
.
'/includes/'.
ucfirst($className)
.'.class.php';
//自動載入
class
文件
}
好了,上面的這些操作都是初步工作,下面正式進入類庫的講解。
類庫講解
首先,我們得實例化
M.class.php,實例化很簡單:
復制代碼
代碼如下:
$m
=
new
M();
//這步操作代表
M.class.php
中的所有功能都封裝在了變數
$m

註:
1、M類庫中的方法參數說明,請到
M.class.php
文件中看詳細的注釋,這里不再進行敘述。建議在學習的時候,對照著看下文件中的參數即注釋。
2、講解代碼中用到的資料庫結構為:
復制代碼
代碼如下:
CREATE
TABLE
`user`
(

`id`
int(8)
unsigned
NOT
NULL
auto_increment,

`name`
varchar(50)
default
NULL,

`email`
varchar(100)
default
NULL,

`age`
smallint(3)
default
NULL,

`class_id`
int(8)
default
NULL,

`commit_time`
int(10)
default
NULL,

PRIMARY
KEY
(`id`),

KEY
`name`
(`name`)
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8
復制代碼
代碼如下:
CREATE
TABLE
`class`
(

`class_id`
int(8)
NOT
NULL
auto_increment,

`class_name`
varchar(100)
default
NULL,

PRIMARY
KEY
(`class_id`)
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8
並添加一條測試數據。
3、M類庫中,大部分方法都分兩中類型,即:SQL方法;拼接方法,具體在實例中可以看出
4、以下稱述中的
M

M.class.php
文件
方法1、Insert()
添加數據
Insert
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Insert("user",
null,
array('焦焦',
'[email protected]',
'23',
time()));
//
拼接方法:往`user`表中添加一條數據,返回值為資料庫影響的行數
$m->Insert("user",
null,
array('焦焦',
'[email protected]',
'23',
time()),
true);
//
功能同上,返回
last_insert_id(插入的增長id)
$m->Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'[email protected]',
'22',
'".time()."')");
//SQL方法,返回值為資料庫影響的行數
$m->Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'[email protected]',
'22',
'".time()."')",
true);
//
同上,返回
last_insert_id
註:Insert
方法中的第二個參數若為null,可自動獲得插入表除
auto_increment
欄位之外的所有欄位,詳情請看M源文件;若要返回值為最後插入的
ID,那麼請設置
Insert
方法的最後一個參數為
true(默認是false);
方法2、Update()
修改數據
update
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Update("user",
array('name'=>'李茹茹',
'age'=>24),
"id=1");
//拼接方法,修改id為1的數據的名稱為「李茹茹」;年齡為「24」,其方法的返回值為受影響的行數
$m->Update("UPDATE
`user`
SET
`name`='李茹茹',
`age`=24
WHERE
id
=
1");
//SQL
用法,功能同上
方法3、Del()
刪除數據
Del
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Del('user',
'id=3');
//拼接方法:刪除`user`表中
id
為3的數據,返回受影響的行數
$m->Del("DELETE
FROM
`user`
WHERE
id=4");
//SQL方法:刪除`user`表中
id
為4的數據,返回受影響的行數
$m->Del("DELETE
FROM
`user`
WHERE
id
in
(10,
11,
12)");
//SQL方法:刪除多條數據,刪除`user`表中
id

10、11、12
的數據,返回受影響的行數
方法4、Total()
獲取記錄數,返回值都為int
Del
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Total('user');
//拼接方法:返回
`user`表中的記錄數,無條件
$m->Total('user',
'id>1');
//拼接方法:返回
`user`表中
id
大於1的記錄數,有條件
$m->Total("SELECT
COUNT(*)
AS
total
FROM
`user`");
//SQL方法,註:使用SQL方法,語句中必須使用
"AS
total",否則會報錯
方法5、IsExists()
檢查數據是否存在,返回值為boolean
復制代碼
代碼如下:
$m->IsExists('user',
"`name`='焦焦'");
//拼接方法:返回`user`表中是否存在`name`為「焦焦」的數據,返回true,若不存在,返回false
方法6、InsertId()
獲取表下一個添加的自動增長id,注意,這里不進行添加操作,只是獲取下一個增長id
復制代碼
代碼如下:
echo
$m->InsertId('user');
//獲取`user`
表下一個添加的自動增長id
方法7、GetRow()
返回單條數據,返回值為一維數組
GetRow
方法的全部使用案例如下:
復制代碼
代碼如下:
$data
=
$m->GetRow("SELECT
`name`,email
FROM
`user`
WHERE
id=1");
//SQL方法,返回一維數組,例如:Array
(
[name]
=>
焦焦
[email]
=>
[email protected]
)
$data
=
$m->GetRow("SELECT
u.`name`,
u.email,
c.class_name
FROM
`user`
u,
`class`
c
WHERE
u.class_id=c.class_id
AND
u.id=1");
//SQL方法,多表查詢
$data
=
$m->GetRow('user',
'`name`,email',
"id=1");
//拼接方法
$data
=
$m->GetRow('user
as
u,`class`
c',
'u.`name`,u.email,c.class_name',
"u.id=1
AND
u.class_id=c.class_id");
//拼接方法,多表查詢
$data
=
$m->GetRow("SELECT
`name`,email
FROM
`user`");
//如果沒有指定條件應該是顯示全部信息,但是在此方法中將默認顯示第一條(不推薦這么使用!!!)
$data
是查詢出來的一維數組。
方法8、GetOne()
返回單個數據
GetOne
方法的全部使用案例如下:
復制代碼
代碼如下:
$name
=
$m->GetOne("SELECT
`name`
FROM
`user`
WHERE
id=1");
//SQL方法,返回一個字元串,例如:焦焦
$name
=
$m->GetOne("user",
"name",
"id=1");
//拼接方法,返回一個字元串,例如:焦焦
方法9、FetchAll()
返回所有記錄
復制代碼
代碼如下:
$data
=
$m->FetchAll("user");
//返回`user`表中的所有記錄,以二維數組的形式
$data
=
$m->FetchAll("SELECT
*
FROM
`user`");
//SQL
方法,功能和返回值同上
$data
=
$m->FetchAll("user",
"name,email",
"id>1",
'id
DESC',
'2');
//返回兩條id>1的數據,只顯示name,email,並且以id
為倒序排序。註:請注意該方法的最後一個參數也可以為'0,2',目的是為分頁准備的,如果第一頁為'0,2'的話,那麼第二頁就是'2,2'
//該方法也支持聯表查詢和多表查詢,下面以聯表查詢為例
$data
=
$m->FetchAll("`user`
as
u
LEFT
JOIN
`class`
as
c
ON
u.class_id=c.class_id",
"u.`name`,u.email,
c.class_name",
"u.id=1");
//注意:該拼接方法中,ON
添加的位置
註:對於該
FetchAll
方法,後續我會寫一篇使用該方法進行完美分頁的文章!!請關注。
方法10、MultiQuery()
執行多條SQL語句
復制代碼
代碼如下:
$sql
=
"INSERT
INTO
user
(`name`,email,
age,
class_id,
commit_time)
VALUES
('賈花花',
'[email protected]',
'22',
'1',
'".time()."')";
//添加一個名叫「賈花花」的學生信息
$sql
.=
";DELETE
FROM
`user`
WHERE
`name`='焦焦'";
//刪除一條名叫「焦焦」的學生信息
//解釋:$sql
是多條
SQL
以英文;(分號)拼接起來的
$data
=
$m->MultiQuery($sql);
//返回為true,代表執行成功;為false,代表執行失敗
類庫講解完畢
到此該類庫的全部功能就講解完畢,希望你能多看看M文件,了解其內部運行的機制。M
文件不會存在執行緩慢情況,請大家放心使用。
如果在使用過程中出現
SQL
拼接錯誤,類庫會報出友善的錯誤提示。
有問題請留言,歡迎大家的批評和建議,加油!學習好運。

Ⅱ php怎樣操作類

$class_methods = get_class_methods(get_class($my_object));
print_r($class_methods);
get_class 返回對象的類名
get_class_methods 返回由類中的函數名組成的數組

Ⅲ 在PHP中,如何在類外部操作私有成員

若想在類外部操作類的私有成員,請在類內部使用__get()和__set()兩個方法:

class model{

function __set($name,$value){

$this->$name=$value;

}

function __get($name){

return $this->$name;

}

}

echo $aa->name;

Ⅳ php學出來能做什麼呢

php學出來能做什麼?讓我們一起了解一下吧!
1、網站:php最簡單的應用就是製作網站,包括資料庫類操作、社區、系統和管理。
2、寫爬蟲:寫爬蟲,也就是我們說的數據採集,雖然不是php的強項,但只要你的php技術足夠好,也是可以用php來寫的。
3、輔助開發:可以用php來輔助其他的東西來做開發,比如電子地圖。
4、開發框架:可以用php來開發框架,也可以用來完成軟體的建立。
可從事的崗位:web前端工程師,PHP後端開發、PHP技術開發工程師,PHP程序員,PHP架構師等。
拓展:php工程師是什麼?
php工程師是對使用php語言進行web應用系統開發的人的統稱,主要分為php初級工程師、php中級工程師和php高級工程師三個等級。PHP工程師能夠熟練使用各種PHP函數和框架函數或對象進行系統業務邏輯開發,與前端對接等工作。
今天的分享就是這些,希望能幫助到大家哦!

Ⅳ php如何使用類和資料庫進行數據操作

貼出自己寫的一個資料庫類吧。
class.php
<?php
class Db_Base
{
var $db_host;
var $db_name;
var $db_user;
var $password;
var $linkID;
var $sql;
var $result;
//構造函數,其中dbname,dbuser,dbpsd填自己的數據名,用戶名,密碼
function __construct()
{
$this->linkID = 0;
$this->sql = "";
$this->db_name="dbname";
$this->db_user="dbuser";
$this->password="dbpsd";
$this->db_host="localhost";
//調用資料庫鏈接函數
$this->Db_Connect();

}
function Db_Base()
{
$this->__construct();
}
//鏈接資料庫函數
function Db_Connect()
{
$this->linkID=@mysql_connect($this->db_host,$this->db_user,$this->password);
if(!$this->linkID)
{
DisplayError("連接失敗");exit();
}
$this->Db_Select();
return true;
}
//選擇資料庫函數
function Db_Select()
{
$select=mysql_select_db($this->db_name);
if(!$select)
{
DisplayError("選擇資料庫失敗");exit();
}
}
//sql語句操作
function Db_Query($sql)
{
if($sql) $this->sql=$sql;
if(!($this->result=mysql_query($this->sql,$this->linkID)))
{
DisplayError("SQL無效");
return 0;
}
else
{
return $this->result;
}
}
//sql語句的結果用數組返回
function Db_Fetch_Array()
{

return mysql_fetch_array($this->result);

}

//select語句 影響的行數
function Db_Num_Rows()
{
return mysql_num_rows($this->result);
}
//INSERT、UPDATE 、DELETE 的影響行數
function Db_Affected_Rows()
{
return mysql_affected_rows();

}
//清除記錄
function Db_Free_Result()
{
if(!is_array($this->result)) return "";
foreach($this->result as $kk => $vv)
{
if($vv) @mysql_free_result($vv);
}
}
?>
其中DisplayError 為外部定義函數

應用的話,如下操作
example.php
<?php
require_once(class.php);
$news=new Db_Base();//構建對象
$sql="select * from tableA limit 0,100";//初始化sql語句
$news->Db_Query($sql);//向資料庫插入sql語句
while($re=$news->Db_Fetch_Array())//循環輸出sql結果集
{
echo $re[keyA];
echo $re[keyB];//keyA,keyB為你數據表的鍵
}
echo $news->Db_Num_Rows();//輸出本次sql語句影響的行數,假若sql語句是update,delete,insert的,則用 Db_Affected_Rows() 函數
$news->Db_Free_Result();//清空查詢結果
?>

好吧,網路的這個表單輸入框真爛,不能調格式,代碼格式可能很亂,就麻煩樓主慢慢看吧。若有問題再發消息給我網路號。

Ⅵ 什麼用於獲取解析php的操作系統類型

php 是一種伺服器端的,嵌入html的腳本語言。php區別其他像客戶端java的地方是它的代碼在伺服器端執行.php能做什麼?
最低水平,php可以做任何其他cgi程序所能做的事,例如收集表格數據,生成動態頁面內容,或者收發cookies.可能最強大,最有意義的特性是php支持大范圍的資料庫.書寫一個支持資料庫的web 頁面是難以置信的簡單.
下面是當前支持的資料庫:
adabas d interbase solid
dbase msql sybase
empress mysql velocis
filepro oracle unix dbm
informix postgresql
php通過協議也支持與其他服務的"交談",像imap, snmp, nntp, pop3, 甚至是 http. 你也可以打開晦澀的 網路介面和其他協議交互.
php的簡要歷史
1994年秋季, rasmus lerdorf 開始構思 php. 早期的非發行版本被用在他的主頁上,以追蹤誰在看他的在線簡歷. 1995年年初第一版本出台,當時php只被認為是個人主頁開發工具.它由一個非常單純的只能理解很少數特殊宏的分析引擎和 一些用在主頁後端通用的工具組成.如留言簿,計數器和其他一些東西.這個分析器在1995年年中被重寫並被命名為 php/fi 第二版. fi來自 rasmus 寫的另外一個包, 用於解釋 html 形式的數據.他結合了個人主頁工具腳本和形式解析器,並加 上msql支持.這樣就產生 php/fi 了. php/fi以令人驚奇的步調成長,人們開始把自己的代碼貢獻給它.
很難給出它的硬統計表,但可以估計在1996年末,整個世界至少有15,000個網站在用php/fi.到1997年年中,這個 數字已經超過50,000了. 而在此時php的發展也發生了變化.由rasmus自己偏愛的和幾個人開發的項目變成一個更有組織的團 體成就.ev suraski和andi gutmans重寫了解析器.這個新的解析器成為php版本3的基礎.許多有用的代碼從php/fi 繼承到php3,並且很多是完全重寫的.
今天(1999年年中)不管是php/fi或php3與很多商業產品捆綁在一塊,例如c2級強度的web伺服器和紅帽子linux. 根據netcraft提供的數據推斷,保守估計全世界應用php的網站已超過150,000個.由此看來,它比在網際網路上運行netscape 的旗艦企業伺服器的站點還多.
1.php是網頁文件.需要有支持php的web伺服器,才能通過瀏覽器打開.如果你實在要打開,用記事本也可以打開,不過裡面是些網頁代碼.你不一定讀得懂 .
2.你所下載的只不過是一個指向(或包含)那個手機鈴聲的網頁,你要真正得到那個鈴聲的地址才能下載它 .
3.應該不是php,是pdf,你把後綴改一下,php文件是網頁格式,用文本編輯器打開,但是本站提供的大部分是pdf格式的,安裝一個pdf閱讀器就能正常打開了.
4.「把擴展名改成 html ,然後用IE打開。」
5.如果安裝了dreamwaver,php文件會顯示dreamwaver可以打開的樣式
不過用不著
到你下載過的貼子里,看你下載的那個東西的擴展名是什麼,比如word文檔後面就是.doc, pdf文檔後面就是.pdf, 壓縮文檔後面就是.rar或 .zip之類的
然後把擴展名替換.php就能開了
我以前好像遇到過這種問題,好像是用下載工具下載的時候有些不默認修改回原來的擴展名吧。
一般論壇里的東西都不是很大,直接點擊保存就行了,就不會遇到這種情況了
6.記事本就可以了~~~~~~~~~~
你要用Word、Fontpage也可以~
反正都是PHP腳本語言~
7.PHP文件是動態網頁文件,它的運行需要ISS服務的支持,如果你想在IE瀏覽器中打開的話,必須安裝ISS服務,否則無法運行。
ISS服務是INTERNET信息服務,安裝步驟:
(1)控制面板--添加刪除程序--添加刪除組件---Internet信息服務--安裝。安裝完成後,會在管理工具中生成Internet信息服務組件,還會在C盤生成Inetpub文件夾,裡面有一個WWWROOT文件夾。
(2)將你PHP文件放到WWWROOT文件夾中,必須是這個文件夾,放在其它文件夾無效.
(3)打開IE瀏覽器,在地址欄中輸入:http://127.0.0.1/****
****是你的PHP文件名,也可以將PHP文件名改為 default.asp,這樣就不用輸入文件名,直接回車就行了,127.0.0.1是指本地機器。

Ⅶ PHP中如何定義類及其成員屬性與操作

3、類中操作的定義
i. 我本人一般喜歡叫操作為成員方法,以下我會叫操作為方法其實都是一樣的
ii. 成員方法的定義:成員方法就是對該類定義的一些函數方法,比如拿這個類來例句例子,人能吃飯,能跑步,能敲代碼,這就是成員方法。也就是可以做一些可執行性的動作我們理解為成員方法
iii. 成員方法的訪問和成員屬性一樣可以參照上面成員屬性的訪問介紹。
iv. 成員方法和成員屬性一樣也包括public,protected,private,static,final並且作用域也是一樣的,接下來舉一些例子供大家參考和理解。
v. 靜態的成員方法只能訪問靜態的成員屬性和成員方法,並且類內部訪問靜態方法可以使用self::靜態方法(), 類外部訪問使用類名::靜態方法()

Ⅷ php是什麼

  • 01

    超文本預處理器

    PHP(外文名:Hypertext Preprocessor,中文名:超文本預處理器)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。

    PHP原始為Personal Home Page的縮寫,已經正式更名為 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的縮寫,這種將名稱放到定義中的寫法被稱作遞歸縮寫。PHP於1994年由Rasmus Lerdorf創建,剛剛開始是Rasmus Lerdorf為了要維護個人網頁而製作的一個簡單的用Perl語言編寫的程序。這些工具程序用來顯示 Rasmus Lerdorf 的個人履歷,以及統計網頁流量。後來又用C語言重新編寫,包括可以訪問資料庫。他將這些程序和一些表單直譯器整合起來,稱為 PHP/FI。PHP/FI 可以和資料庫連接,產生簡單的動態網頁程序。在1995年以Personal Home Page Tools (PHP Tools) 開始對外發表第一個版本,Lerdorf寫了一些介紹此程序的文檔。並且發布了PHP1.0!在這的版本中,提供了訪客留言本、訪客計數器等簡單的功能。以後越來越多的網站使用了PHP,並且強烈要求增加一些特性。比如循環語句和數組變數等等;在新的成員加入開發行列之後,Rasmus Lerdorf 在1995年6月8日將 PHP/FI 公開發布,希望可以透過社群來加速程序開發與尋找錯誤。這個發布的版本命名為 PHP 2,已經有 PHP 的一些雛型,像是類似 Perl的變數命名方式、表單處理功能、以及嵌入到 HTML 中執行的能力。程序語法上也類似 Perl,有較多的限制,不過更簡單、更有彈性。PHP/FI加入了對MySQL的支持,從此建立了PHP在動態網頁開發上的地位。到了1996年底,有15000個網站使用 PHP/FI。在1997年,任職於 Technion IIT公司的兩個以色列程序設計師:Zeev Suraski 和 Andi Gutmans,重寫了 PHP 的剖析器,成為 PHP 3 的基礎。而 PHP 也在這個時候改稱為PHP:Hypertext Preprocessor。經過幾個月測試,開發團隊在1997年11月發布了 PHP/FI 2。隨後就開始 PHP 3 的開放測試,最後在1998年6月正式發布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 發布後開始改寫PHP 的核心,這個在1999年發布的剖析器稱為 Zend Engine,他們也在以色列的 Ramat Gan 成立了 Zend Technologies 來管理 PHP 的開發。在2000年5月22日,以Zend Engine 1.0為基礎的PHP 4正式發布,2004年7月13日則發布了PHP 5,PHP 5則使用了第二代的Zend Engine。PHP包含了許多新特色,像是強化的面向對象功能、引入PDO(PHP Data Objects,一個存取資料庫的延伸函數庫)、以及許多效能上的增強。PHP 4已經不會繼續更新,以鼓勵用戶轉移到PHP 5。2008年PHP 5成為了PHP唯一的有在開發的PHP版本。將來的PHP 5.3將會加入Late static binding和一些其他的功能強化。PHP 6 的開發也正在進行中,主要的改進有移除register_globals、magic quotes 和 Safe mode的功能。

    PHP最新穩定版本:5.4.30(2013.6.26)PHP最新發布的正式版本:5.5.14(2014.6.24)PHP最新測試版本:5.6.0 RC2(2014.6.03)2013年6月20日,PHP開發團隊自豪地宣布推出PHP 5.5.0。此版本包含了大量的新功能和bug修復。需要開發者特別注意的一點是不再支持 Windows XP 和 2003 系統。2014年10月16日,PHP開發團隊宣布PHP 5.6.2可用。四安全相關的錯誤是固定在這個版本,包括修復cve-2014-3668,cve-2014-3669和cve-2014-3670。所有的PHP 5.6鼓勵用戶升級到這個版本。

    PHP的特性包括:1. PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法。2. PHP可以比CGI或者Perl更快速的執行動態網頁——動態頁面方面,與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成htmL標記的CGI要高許多;PHP具有非常強大的功能,所有的CGI的功能PHP都能實現。3. PHP支持幾乎所有流行的資料庫以及操作系統。4. 最重要的是PHP可以用C、C++進行程序的擴展!

Ⅸ 如何在PHP中使用內部類

方法如下:
public class Lei{
public static void main(String ages[]){
Leis x=new Leis();
}
public static class Leis{
public Leis(){
System.out.println("asd");
}
}
}
主函數調用的是靜態方法,內部類要定義為static,Leis()為構造方法,用來初始化成員變數,不能用「x.Leis()」

Ⅹ PHP中使用Memache作為進程鎖的操作類分享

<?php
//
使用Memache
作為進程鎖
class
lock_processlock{
//
key
的前綴
protected
$sLockKeyPre;
//
重試間隔
protected
$iLockRetryInterval;
//重試次數
protected
$iLockRetryCount;
//鎖的過期時間
protected
$iLockCacheTimeout;
//
鎖過期後的回調函數
protected
$onLockTimeoutFunc;
//
memache
的實例
protected
$oMemcache;
//
存儲memcache失敗後重試次數
protected
$iMemcacheRetryCount;
public
function
__construct
($onLockTimeoutFunc=NULL)
{
$aLockConfig
=
get_config('',
'lock');
$this->sLockKeyPre
=
self::LOCK_KEY_PRE;
$this->iLockRetryInterval
=
self::LOCK_RETRY_INTERVAL;
$this->iLockRetryCount
=self::LOCK_RETRY_COUNT;
$this->iLockCacheTimeout
=
self::LOCK_CACHE_TIMEOUT;
$this->iMemcacheRetryCount
=
self::LOCK_CACHE_TIMEOUT;
if(!$onLockTimeoutFunc){
//
如果加鎖不成功則調用回調函數,如果沒有回調函數,使用本類中所帶的
$onLockTimeoutFunc
='onLockTimeout'
;
}
$this->onLockTimeoutFunc
=
$onLockTimeoutFunc;
}
/**
連接memcache
伺服器
*/
public
function
connect()
{
if
(!
isset
(
$this->oMemcache
))
{
$this->oMemcache
=
new
Memcache
();
$this->oMemcache->connect
(
'127.0.0.1',
11211
);
}
return
$this->oMemcache;
}
/*
向MeMcache中添加
key
*/
public
addMemcache($sKey,
$sValue,
$iTimeout){
for($i=
0
;
$i<$this->iMemcacheRetryCount){
$bRes
=
$this->oMemcache->add($sKey,
$sValue,
$iTimeout);
if($bRes){
return
true
;
}
//
如果加鎖不成功,sleep
之後,從新加鎖
usleep($this->iLockRetryInterval*1000);
}
return
false
;
}
/*
加鎖
*/
public
function
lock($sLockID){
$oMemcache
=
$this->connect();
$sKey
=
$this->sLockKeyPre
.
$sLockID;
//
加鎖如果不成功可以多試幾次
for($i
=
0
;
$i
<$this->iLockRetryCount
;
$i++){
//
這里設置value
的值可以隨便設置
if($this->addMemcache($sKey,'1',$this->iLockCacheTimeout)){
return
true
;
}
//
如果加鎖不成功,sleep
之後,從新加鎖
usleep($this->iLockRetryInterval*1000);
}
//
若還不成功,則加鎖失敗,調用回調函數,.也就是失敗後需要處理的操作
if(is_callable($this->onLockTimeoutFunc)){
//
調用函數
call_user_func($this->onLockTimeoutFunc);
}
}
/*
解鎖操作
*/
public
function
unlock($sLockID){
$oMemcache
=
$this->connect();
$sKey
=
$this->sLockKeyPre
.
$sLockID;
//
刪除key
return
$this->oMemcache->delete($sKey);
}
/**
如果加鎖不成功,則執行如下操作
*/
public
function
onLockTimeout(){
echo
("加鎖超時");
}
}
//
應用實例
$oLock
=
new
lock_processlock();
$lockResource
=
"test";
//
加鎖
$oLock->lock($lockResource);
//
解鎖
$oLock->unlock($lockResource);

熱點內容
安卓照片存儲位置 發布:2025-07-07 21:31:58 瀏覽:962
kingcmsphp 發布:2025-07-07 21:31:49 瀏覽:390
微信的鎖屏密碼是什麼 發布:2025-07-07 21:28:52 瀏覽:755
樹莓派自帶ftp開啟 發布:2025-07-07 21:11:41 瀏覽:50
智慧樹用腳本會怎麼樣 發布:2025-07-07 21:05:48 瀏覽:515
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:536
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:32
linux485 發布:2025-07-05 14:38:28 瀏覽:310
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:760
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:437