程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> 那些未曾了解的7個PHP函數和功能

那些未曾了解的7個PHP函數和功能

編輯:PHP基礎知識
 

1、任意參數數目的函數
建立能夠接受任何參數數目的函數。使用func_get_args()函數:以下為引用的內容:
function foo(){
$args=func_get_args();
foreach($args as $k=>$v){
echo“arg”.($k+1).”:$v\n”;
}
}

2、使用Glob()查找文件
許多PHP函數具有長描述性的名稱。然而可能會很難說出glob()函數能做的事情,除非你已經通過多次使用並熟悉了它。可以把它看作是比scandir()函數更強大的版本,可以按照某種模式搜索文件。以下為引用的內容:
$files=glob('*.php');
print_r($files);
/*outputlookslike:
Array
(
[0]=>phptest.php
[1]=>pi.php
[2]=>post_output.php
[3]=>test.php
)
*/
3、內存使用信息
通過偵測腳本的內存使用情況,有利於代碼的優化。PHP提供了一個垃圾收集器和一個非常復雜的內存管理器。腳本執行時所使用的內存量,有升有跌。為了得到當前的內存使用情況,我們可以使用memory_get_usage()函數。
如果需要獲得任意時間點的最高內存使用量,則可以使用memory_limit()函數。
以下為引用的內容:
echo“Initial:“.memory_get_usage().”bytes\n”;
/*prints
Initial:361400bytes
*/
//let’suseupsomememory
for($i=0;$i<100000;$i++){
$array[]=md5($i);
}
//let'sremovehalfofthearray
for($i=0;$i<100000;$i++){
unset($array[$i]);
}
echo"Final:".memory_get_usage()."bytes\n";
/*prints
Final:885912bytes
*/
echo"Peak:".memory_get_peak_usage()."bytes\n";
/*prints
Peak:13687072bytes
*/
4、CPU使用信息
為此,我們要利用getrusage()函數。請記住這個函數不適用於Windows平台。以下為引用的內容:
print_r(getrusage());
/*prints
Array
(
[ru_oublock]=>0
[ru_inblock]=>0
[ru_msgsnd]=>2
[ru_msgrcv]=>3
[ru_maxrss]=>12692
[ru_ixrss]=>764
[ru_idrss]=>3864
[ru_minflt]=>94
[ru_majflt]=>0
[ru_nsignals]=>1
[ru_nvcsw]=>67
[ru_nivcsw]=>4
[ru_nswap]=>0
[ru_utime.tv_usec]=>0
[ru_utime.tv_sec]=>0
[ru_stime.tv_usec]=>6269
[ru_stime.tv_sec]=>0
)
這可能看起來有點神秘,除非你已經有系統管理員權限。以下是每個值的具體說明(你不需要記住這些):以下為引用的內容:
ru_oublock:blockoutputoperations
ru_inblock:blockinputoperations
ru_msgsnd:messagessent
ru_msgrcv:messagesreceived
ru_maxrss:maximumresidentsetsize
ru_ixrss:integralsharedmemorysize
ru_idrss:integralunshareddatasize
ru_minflt:pagereclaims
ru_majflt:pagefaults
ru_nsignals:signalsreceived
ru_nvcsw:voluntarycontextswitches
ru_nivcsw:involuntarycontextswitches
ru_nswap:swaps
ru_utime.tv_usec:usertimeused(microseconds)
ru_utime.tv_sec:usertimeused(seconds)
ru_stime.tv_usec:systemtimeused(microseconds)
ru_stime.tv_sec:systemtimeused(seconds)
要知道腳本消耗多少CPU功率,我們需要看看‘usertime’和’systemtime’兩個參數的值。秒和微秒部分默認是單獨提供的。你可以除以100萬微秒,並加上秒的參數值,得到一個十進制的總秒數。讓我們來看一個例子:以下為引用的內容:
//sleepfor3seconds(non-busy)
sleep(3);
$data=getrusage();
echo“Usertime:“.
($data['ru_utime.tv_sec']+
$data['ru_utime.tv_usec']/1000000);
echo“Systemtime:“.
($data['ru_stime.tv_sec']+
$data['ru_stime.tv_usec']/1000000);
/*prints
Usertime:0.011552
Systemtime:0
*/
盡管腳本運行用了大約3秒鐘,CPU使用率卻非常非常低。因為在睡眠運行的過程中,該腳本實際上不消耗CPU資源。還有許多其他的任務,可能需要一段時間,但不占用類似等待磁盤操作等CPU時間。因此正如你所看到的,CPU
使用率和運行時間的實際長度並不總是相同的。下面是一個例子:
以下為引用的內容:
//loop10milliontimes(busy)
for($i=0;$i<10000000;$i++){

}
$data=getrusage();
echo"Usertime:".
($data['ru_utime.tv_sec']+
$data['ru_utime.tv_usec']/1000000);
echo"Systemtime:".
($data['ru_stime.tv_sec']+
$data['ru_stime.tv_usec']/1000000);
/*prints
Usertime:1.424592
Systemtime:0.004204
*/
這花了大約1.4秒的CPU時間,但幾乎都是用戶時間,因為沒有系統調用。系統時間是指花費在執行程序的系統調用時的CPU開銷。下面是一個例子:以下為引用的內容:
$start=microtime(true);
//keepcallingmicrotimeforabout3seconds
while(microtime(true)-$start<3){

}
$data=getrusage();
echo"Usertime:".
($data['ru_utime.tv_sec']+
$data['ru_utime.tv_usec']/1000000);
echo"Systemtime:".
($data['ru_stime.tv_sec']+
$data['ru_stime.tv_usec']/1000000);
/*prints
Usertime:1.088171  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved