PHP原生函式一定好嗎?

2022-10-06 11:18:14 字數 1674 閱讀 4528

今天在閱讀kohana原始碼中的arr類的時候發現了這樣乙個函式

複製** **如下:

/*** fill an array with a range of numbers.

*  *     // fill an array with values 5, 10, 15, 20

*     $values = arr::range(5, 20);

*  * @param   integer $step   stepping

* @param  程式設計客棧 integer $max    ending number

* @return  array

*/public static function range($step = 10, $max = 100)

return $array; } 

看到這裡的時候,我發現php的原生函式也是可以實現這個功能的,忽然想到程式設計客棧之前聽到過的乙個前輩關於php效能優化的說法——php為我們提供了那麼多的原生函式,我們盡量用原生函式解決問題。於是我就做了個測試,看看php原生函式效能究竟比自己寫的快多少。要測試的函式有原生函式range()和上面的函式_range(),這裡加下劃線開始是因為重寫原生函式range()會報錯「fatal error: cannot redeclare range() in」。

複製** **如下:

function _range($step = 10, $max = 100)

return $array;

} $time['begin'] = microtime(true);

$tmp = range(0,1000000,3);

//$tmp = _range(0,1000000,3);

$time['end']   = microtime(true);

echo $time['end'] - $time['begin'].'s'."\r";

echo (memory_get_peak_usage()/1024/1024)."m";

分別用原生函式和自定義函式進行測試,在產生0~1000000之間所有的3的倍數時,結果出乎我的意料:

首先是使用原生函式的結果:

下面是使用自定義函式的結果:

為了結果比較準確,我在做個圖表統計

統計次數 www.cppcns.com;原生函式range()&nbsyxjkpp;自定義函式_range()

(0,1000000,3) 5.155e-3s 27.5530m 1.907e-5s 0.1241m

(0,1000000,2) 7.479e-3s 40.2688m 1.811e-5s 0.1241m

(0,1000,1) 8.16e-5s 0.1620m 2.649e-5s 0.1241m

從表中可以看出產生隨機數時自定義函式比原生函式要節省記憶體和時間,而且原生函式在生成大量隨機數時特別耗記憶體,消耗時間也特別多,而自定義函式在這方面則表現得好,產生的記憶體和消耗的時間基本穩定,看來前面那位前輩說的不一定完全正確哦,但是這裡要注意我們這裡的自定義函式只能生成數字,而原生的range還可以產生字母的,但是我想這自定義函式新增個字母應該也不會太難~

看來kohana官方對range這個函式很是了解,對php核心中該函式的複雜www.cppcns.com度也很了解,所以這個小優化才可以做這麼好,太厲害了!!!

本文標題: php原生函式一定好嗎?

本文位址:

一定好好的愛你

一定好好的愛你 代騰飛 2009年9月24日 於成都 雖然我們只是一次短暫的相遇 但你的天真和純情早已將我深深吸引 雖然我們還來不及說上三言兩語 但我知道我已經深深地愛上了你 踏遍了千山萬水,只為把你苦苦追尋 歷盡了萬千風雨,只為想給你在一起 讓我找到你,真的很不容易 如果你能給我一次機會讓我好好愛...

繫結變數不一定好

因為繫結變數後不知道變數的具體值,會影響優化器的執行計畫,看這個例子 表中有10000行列a的值從1 10000 sql variable id number sql execute id 9 sql select from t where a id 0 select statement 500 1...

又大又新不一定好。

前一段時間有次在支付寶給餘額寶打錢時,遇到這麼乙個鬱悶的事情,首先銀行卡不能直接往餘額寶裡面直接打錢,先打到支付寶餘額裡面,才能衝到餘額寶裡面,當我從支付寶預設頁面進入充值到餘額的介面時,發現和之前往餘額寶打錢進了同乙個介面,好生鬱悶,後來往返數次之後發現了奧妙 這個頁面包含乙個tab介面設計 如圖...