日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

使用static來避免“重復讀”

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

在較復雜的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/

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 99久久精品视频免费 | 欧美性hd | 日本欧美中文字幕 | 99精品电影 | 亚洲福利片 | 亚洲成人免费在线 | 国产区在线看 | 欧美日韩亚洲国产综合 | 中文字幕一区二区在线播放 | a级毛片免费网站 | 亚洲成人精品在线 | 国产精品久久久久久久免费大片 | 热re99久久精品国产99热 | 中国国产一级毛片 | 99福利| 欧美精品一区在线观看 | 狠狠操综合网 | 国产综合在线视频 | 性欧美大战久久久久久久免费观看 | 黄色一级视频 | 亚洲3atv精品一区二区三区 | 日韩免费小视频 | 人成福利视频在线观看 | 久久精品国产精品 | 国产精品久久av | 欧美成人毛片 | 亚洲精品乱码久久久久久按摩观 | 国产精品成人在线观看 | 在线一区视频 | 成人性生交大片免费看在线播放 | 精品国产31久久久久久 | 麻豆少妇 | 日韩欧美一区二区三区免费观看 | 成人在线一区二区 | 国产精品久久久久久久久免费看 | 精品久久网 | 亚洲一区二区三区在线免费观看 | 欧美亚洲国产一区二区三区 | 国产精品久久久久久久久久久久 | 毛片免费播放 | 亚洲视频色 |