多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 使用static來避免“重復讀”

使用static來避免“重復讀”

來源:程序員人生   發布時間:2014-01-10 23:59:30 閱讀次數:3133次

在較復雜的web程序開發中,由于采用面向對象的數據操作方式,或者業務邏輯太過復雜,開發人員在開發過程中,經常會無意識的重復讀取數據。
比如:
$result1 = tableobjectPeer::getResult($var1,$var2,$var3);
開發人員在需要的該table數據的時候,經常直接調用 tableobjectPeer::getResult方法。
又或者程序在進行forward的時候,也會導致重復調用  tableobjectPeer::getResult 方法,導致“重復讀”。

要避免類似的“重復讀”,最主要的辦法是,開發人員在代碼開發的時候,就要有“避免重復讀”的意識。
其實只要在:
$result1 = tableobjectPeer::getResult($var1,$var2,$var3);
之后,需要的地方進行
$result2 = $result1;
$result3 = $result1;
即可。這樣子就可以避免掉大量的“重復讀”了。
但是如果開放人員一開始沒有這樣做,那要進行這方面的重構可能是很大的工作量。
另外,由于框架中的forward()也容易造成“重復讀”。如果“重復讀”是forward()造成的,那該方法就不可行了(這點也許和不同的開發語言,不同的開發框架有關,在php的symfony框架中是如此)。

因此,在采用上面的方法進行優化的同時,對于一些較復雜的情況,決定采用另一種方式:使用static,設置變量為靜態變量,來避免重復讀取數據

以下為引用的內容:
<?php
//要改寫的函數也請加上$is_static=1變量,用來控制是否開啟 static。
function staticFunc ($var1,$var2,$var3,$is_static=1)
{
if ( $is_static == 1 )//默認需要緩存函數結果
{
static $result_array;//該數組用來保存函數的結果,支持不同參數的結果緩存
$vars_string = serialize( func_get_args() );

if ( empty( $result_array ) )//第一次運行需要初始化
{
$result_array = array();
}

if ( array_key_exists( $vars_string, $result_array ) )//參數已經存在
{
return $result_array[$vars_string];//返回靜態變量中已經保存的結果
}else//參數不存在
{
$result_array[$vars_string] = '';//后面會把結果補充進來
}
}else//不利用static 緩沖結果
{
if ( empty( $result_array ) )
{
$result_array = array();
}
}

$result_array[$vars_string] = rand();//獲取結果,請把獲取的代碼放在此處即可
return $result_array[$vars_string];
}

echo staticFunc(1,2,3);
echo "<br>";
echo staticFunc(2,2,2);
echo "<br>";
echo staticFunc(1,2,3);
echo "<br>";
echo staticFunc(2,2,2);
echo "<br>";
echo staticFunc(3,3,3);
echo "<br>";
echo staticFunc(3,3,3,0);
echo "<br>";
?>

運行上述代碼,產生的結果類似:
16667
8888
16667
8888
2193
1014
可以看出,第1行和第3行的結果一致,第2行和第4行的結果一致,說明只要函數的參數相同,函數結果就進行了有效的“cache”。
從第4行和第5行,可以看出,通過設置$is_static變量能有效控制是否開啟“cache”。

補充:上述使用static方法,可以有效的避免在一個線程內,重復讀取數據,但是該cache只存在一個線程內,不同線程是相互獨立的。雖然只是線程內的函數結果“cache”,但是其原理和其他方式的cache是類似的,就是要針對不同的參數(不同的情況)構造出cache的key。

轉自:http://www.cnblogs.com/rethink/

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲一级成人 | 另类综合图片 | 精品日韩 | 国产亚洲精品一区久久 | 日本理论午夜中文字幕第一页 | 国产三级中文字幕 | 老司机福利在线免费观看 | 欧美一区二区在线播放 | 亚洲最色 | 日本一区二区三区四区在线观看 | 亚洲第一免费网站 | jizz大全jizz大全jizz | 国产亚洲欧美ai在线看片 | 一级淫片免费视频 | 国产精品一区高清在线观看 | 国产精品高清一区二区三区 | 国产精品揄拍一区二区 | 日本综合视频 | 午夜噜噜噜私人影院在线播放 | 欧美亚洲国产精品第一页 | 午夜精品久久久久久 | 亚洲国产精品第一区二区三区 | a成人| 国产精品二区三区免费播放心 | 亚洲线精品久久一区二区三区 | 欧美孕交videofree巨大 | 波多野结衣91 | xx日本护士 | 亚洲黄色影片 | 欧美xxxx在线 | 一级毛片免费 | 亚洲高清视频在线播放 | 亚洲日本中文 | 另类图片另类小说 | 真人性做爰aa毛片免费视频观看 | 91精品国产亚一区二区三区 | 一级做性色a爰片久久毛片免费 | 啪啪大片 | 精品久久久久不卡无毒 | 欧美性生活视频免费播放网址大全观看 | 校园春色 亚洲色图 |