php中的microtime函數(shù)用于返回當(dāng)前時(shí)間的微秒數(shù)。在一些程序中,我們需要計(jì)算代碼執(zhí)行的時(shí)間,這時(shí)候microtime函數(shù)就派上用場了。
比如,我們編寫了下面這段代碼:
$start_time = microtime(true); // 執(zhí)行某些代碼 $end_time = microtime(true); $cost_time = $end_time - $start_time; echo "代碼執(zhí)行耗時(shí):{$cost_time}秒";
這段代碼的作用是計(jì)算執(zhí)行某些代碼的耗時(shí)。$start_time和$end_time分別是代碼開始執(zhí)行和結(jié)束執(zhí)行時(shí)的時(shí)間,兩者相減就能得到代碼執(zhí)行的耗時(shí)。
上述代碼中microtime函數(shù)的參數(shù)為true,表示返回浮點(diǎn)數(shù)(秒加微秒),如果參數(shù)為false或不填,則返回字符串類型的時(shí)間戳。
有時(shí)候,我們需要在循環(huán)中計(jì)算每次循環(huán)的耗時(shí),這時(shí)候可以將計(jì)算代碼耗時(shí)的部分封裝成一個(gè)函數(shù),如下所示:
function calcCostTime() { static $last_time; $now_time = microtime(true); if($last_time){ $cost_time = $now_time - $last_time; echo "本次循環(huán)耗時(shí):{$cost_time}秒\n"; } $last_time = $now_time; } for($i=0; $i<10; $i++){ calcCostTime(); // 執(zhí)行循環(huán)中的一些操作 }
上面的代碼中,calcCostTime函數(shù)中使用了static關(guān)鍵字,將$last_time變量聲明為靜態(tài)變量,這樣每一次函數(shù)調(diào)用時(shí),$last_time變量的值是上一次函數(shù)調(diào)用時(shí)保存的值。這樣,在循環(huán)中調(diào)用calcCostTime函數(shù)就可以計(jì)算每次循環(huán)的耗時(shí)了。
如果我們需要計(jì)算整個(gè)PHP腳本的執(zhí)行時(shí)間,可以利用register_shutdown_function函數(shù),在PHP腳本結(jié)束時(shí)執(zhí)行某個(gè)函數(shù):
function shutdown(){ $cost_time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]; echo "本次腳本執(zhí)行耗時(shí):{$cost_time}秒\n"; } register_shutdown_function('shutdown'); // 執(zhí)行PHP腳本的一些操作
上面的代碼中,我們利用$_SERVER["REQUEST_TIME_FLOAT"]來保存腳本開始執(zhí)行的時(shí)間,然后在register_shutdown_function函數(shù)中注冊(cè)一個(gè)shutdown函數(shù),在腳本結(jié)束時(shí)調(diào)用該函數(shù),計(jì)算腳本執(zhí)行的耗時(shí)。
總的來說,microtime函數(shù)在PHP中非常實(shí)用,可以幫助我們計(jì)算代碼執(zhí)行的耗時(shí),優(yōu)化代碼性能。