国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

8個(gè)必備的PHP功能開(kāi)發(fā)

2024-04-25 20:42:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

PHP開(kāi)發(fā)的程序員應(yīng)該清楚,PHP中有很多內(nèi)置的功能,掌握了它們,可以幫助你在做PHP開(kāi)發(fā)時(shí)更加得心應(yīng)手,本文將分享8個(gè)開(kāi)發(fā)必備的PHP功能,個(gè)個(gè)都非常實(shí)用,希望各位PHP開(kāi)發(fā)者能夠掌握。

1、傳遞任意數(shù)量的函數(shù)參數(shù)

我們?cè)?NET或者JAVA編程中,一般函數(shù)參數(shù)個(gè)數(shù)都是固定的,但是PHP允許你使用任意個(gè)數(shù)的參數(shù)。下面這個(gè)示例向你展示了PHP函數(shù)的默認(rèn)參數(shù):

//兩個(gè)默認(rèn)參數(shù)的函數(shù)functionfoo($arg1=”,$arg2=”){echo“arg1:$arg1n”;echo“arg2:$arg2n”;}foo(‘hello','world');/*輸出:arg1:helloarg2:world*/foo();/*輸出:arg1:arg2:*/

下面這個(gè)示例是PHP的不定參數(shù)用法,其使用到了func_get_args()方法:

//是的,形參列表為空f(shuō)unctionfoo(){//取得所有的傳入?yún)?shù)的數(shù)組$args=func_get_args();foreach($argsas$k=>$v){echo“arg”.($k+1).”:$vn”;}}foo();/*什么也不會(huì)輸出*/foo(‘hello');/*輸出arg1:hello*/foo(‘hello',‘world',‘again');/*輸出arg1:helloarg2:worldarg3:again*/

2、使用glob()查找文件

大部分PHP函數(shù)的函數(shù)名從字面上都可以理解其用途,但是當(dāng)你看到glob()的時(shí)候,你也許并不知道這是用來(lái)做什么的,其實(shí)glob()和scandir()一樣,可以用來(lái)查找文件,請(qǐng)看下面的用法:

//取得所有的后綴為PHP的文件$files=glob(‘*.php');print_r($files);/*輸出:Array([0]=>phptest.php[1]=>pi.php[2]=>post_output.php[3]=>test.php)*/你還可以查找多種后綴名://取PHP文件和TXT文件$files=glob(‘*.{php,txt}',GLOB_BRACE);print_r($files);/*輸出:Array([0]=>phptest.php[1]=>pi.php[2]=>post_output.php[3]=>test.php[4]=>log.txt[5]=>test.txt13.)*/

你還可以加上路徑:

$files=glob(‘../images/a*.jpg');print_r($files);/*輸出:Array([0]=>../images/apple.jpg[1]=>../images/art.jpg)*/

如果你想得到絕對(duì)路徑,你可以調(diào)用realpath()函數(shù):

$files=glob(‘../images/a*.jpg');//appliesthefunctiontoeacharrayelement$files=array_map(‘realpath',$files);print_r($files);/*outputlookslike:Array([0]=>C:wampwwwimagesapple.jpg[1]=>C:wampwwwimagesart.jpg)*/

3、獲取內(nèi)存使用情況信息

PHP的內(nèi)存回收機(jī)制已經(jīng)非常強(qiáng)大,你也可以使用PHP腳本獲取當(dāng)前內(nèi)存的使用情況,調(diào)用memory_get_usage()函數(shù)獲取當(dāng)期內(nèi)存使用情況,調(diào)用memory_get_peak_usage()函數(shù)獲取內(nèi)存使用的峰值。參考代碼如下:

echo“Initial:“.memory_get_usage().”bytesn”;/*輸出Initial:361400bytes*///使用內(nèi)存for($i=0;$i<100000;$i++){$array[]=md5($i);}//刪除一半的內(nèi)存for($i=0;$i<100000;$i++){unset($array[$i]);}echo“Final:“.memory_get_usage().”bytesn”;/*printsFinal:885912bytes*/echo“Peak:“.memory_get_peak_usage().”bytesn”;/*輸出峰值Peak:13687072bytes*/

4、獲取CPU使用情況信息

獲取了內(nèi)存使用情況,也可以使用PHP的getrusage()獲取CPU使用情況,該方法在windows下不可用。

print_r(getrusage());/*輸出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)*/

這個(gè)結(jié)構(gòu)看上出很晦澀,除非你對(duì)CPU很了解。下面一些解釋:

ru_oublock:塊輸出操作

ru_inblock:塊輸入操作

ru_msgsnd:發(fā)送的message

ru_msgrcv:收到的message

ru_maxrss:最大駐留集大小

ru_ixrss:全部共享內(nèi)存大小

ru_idrss:全部非共享內(nèi)存大小

ru_minflt:頁(yè)回收

ru_majflt:頁(yè)失效

ru_nsignals:收到的信號(hào)

ru_nvcsw:主動(dòng)上下文切換

ru_nivcsw:被動(dòng)上下文切換

ru_nswap:交換區(qū)

ru_utime.tv_usec:用戶態(tài)時(shí)間(microseconds)

ru_utime.tv_sec:用戶態(tài)時(shí)間(seconds)

ru_stime.tv_usec:系統(tǒng)內(nèi)核時(shí)間(microseconds)

ru_stime.tv_sec:系統(tǒng)內(nèi)核時(shí)間?(seconds)

要看到你的腳本消耗了多少CPU,我們需要看看“用戶態(tài)的時(shí)間”和“系統(tǒng)內(nèi)核時(shí)間”的值。秒和微秒部分是分別提供的,您可以把微秒值除以100萬(wàn),并把它添加到秒的值后,可以得到有小數(shù)部分的秒數(shù)。

//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);/*輸出Usertime:0.011552Systemtime:0*/sleep是不占用系統(tǒng)時(shí)間的,我們可以來(lái)看下面的一個(gè)例子://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);/*輸出Usertime:1.424592Systemtime:0.004204*/

這花了大約14秒的CPU時(shí)間,幾乎所有的都是用戶的時(shí)間,因?yàn)闆](méi)有系統(tǒng)調(diào)用。

系統(tǒng)時(shí)間是CPU花費(fèi)在系統(tǒng)調(diào)用上的上執(zhí)行內(nèi)核指令的時(shí)間。下面是一個(gè)例子:

$start=microtime(true);//keepcallingmicrotimeforabout3secondswhile(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);/*printsUsertime:1.088171Systemtime:1.675315*/

我們可以看到上面這個(gè)例子更耗CPU。

5、獲取系統(tǒng)常量

PHP提供非常有用的系統(tǒng)常量可以讓你得到當(dāng)前的行號(hào)(__LINE__),文件(__FILE__),目錄(__DIR__),函數(shù)名(__FUNCTION__),類名(__CLASS__),方法名(__METHOD__)和名字空間(__NAMESPACE__),很像C語(yǔ)言。

我們可以以為這些東西主要是用于調(diào)試,當(dāng)也不一定,比如我們可以在include其它文件的時(shí)候使用?__FILE__(當(dāng)然,你也可以在PHP5.3以后使用__DIR__),下面是一個(gè)例子。

//thisisrelativetotheloadedscript'spath//itmaycauseproblemswhenrunningscriptsfromdifferentdirectoriesrequire_once(‘config/database.php');//thisisalwaysrelativetothisfile'spath//nomatterwhereitwasincludedfromrequire_once(dirname(__FILE__).‘/config/database.php');

下面是使用__LINE__來(lái)輸出一些debug的信息,這樣有助于你調(diào)試程序:

//somecode//…my_debug(“somedebugmessage”,__LINE__);/*輸出Line4:somedebugmessage*///somemorecode//…my_debug(“anotherdebugmessage”,__LINE__);/*輸出Line11:anotherdebugmessage*/functionmy_debug($msg,$line){echo“Line$line:$msgn”;}

6、生成唯一的id

很多朋友都利用md5()來(lái)生成唯一的編號(hào),但是md5()有幾個(gè)缺點(diǎn):1、無(wú)序,導(dǎo)致數(shù)據(jù)庫(kù)中排序性能下降。2、太長(zhǎng),需要更多的存儲(chǔ)空間。其實(shí)PHP中自帶一個(gè)函數(shù)來(lái)生成唯一的id,這個(gè)函數(shù)就是uniqid()。下面是用法:

//generateuniquestringechouniqid();/*輸出4bd67c947233e*///generateanotheruniquestringechouniqid();/*輸出4bd67c9472340*/

該算法是根據(jù)CPU時(shí)間戳來(lái)生成的,所以在相近的時(shí)間段內(nèi),id前幾位是一樣的,這也方便id的排序,如果你想更好的避免重復(fù),可以在id前加上前綴,如:

//前綴echouniqid(‘foo_');/*輸出foo_4bd67d6cd8b8f*///有更多的熵echouniqid(”,true);/*輸出4bd67d6cd8b926.12135106*///都有echouniqid(‘bar_',true);/*輸出bar_4bd67da367b650.43684647*/

7、序列化

PHP序列化功能大家可能用的比較多,也比較常見(jiàn),當(dāng)你需要把數(shù)據(jù)存到數(shù)據(jù)庫(kù)或者文件中是,你可以利用PHP中的serialize()和unserialize()方法來(lái)實(shí)現(xiàn)序列化和反序列化,代碼如下:

//一個(gè)復(fù)雜的數(shù)組$myvar=array(‘hello',42,array(1,'two'),‘apple');//序列化$string=serialize($myvar);echo$string;/*輸出a:4:{i:0;s:5:”hello”;i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:”two”;}i:3;s:5:”apple”;}*///反序例化$newvar=unserialize($string);print_r($newvar);/*輸出Array([0]=>hello[1]=>42[2]=>Array([0]=>1[1]=>two)[3]=>apple)*/

如何序列化成json格式呢,放心,php也已經(jīng)為你做好了,使用php5.2以上版本的用戶可以使用json_encode()和json_decode()函數(shù)來(lái)實(shí)現(xiàn)json格式的序列化,代碼如下:

//acomplexarray$myvar=array(‘hello',42,array(1,'two'),‘apple');//converttoastring$string=json_encode($myvar);echo$string;/*prints["hello",42,[1,"two"],”apple”]*///youcanreproducetheoriginalvariable$newvar=json_decode($string);print_r($newvar);/*printsArray([0]=>hello[1]=>42[2]=>Array([0]=>1[1]=>two)[3]=>apple)*/

8、字符串壓縮

當(dāng)我們說(shuō)到壓縮,我們可能會(huì)想到文件壓縮,其實(shí),字符串也是可以壓縮的。PHP提供了gzcompress()和gzuncompress()函數(shù):

$string=“Loremipsumdolorsitamet,consecteturadipiscingelit.Nuncutelitidmiultriciesadipiscing.Nullafacilisi.Praesentpulvinar,sapienvelfeugiatvestibulum,nulladuipretiumorci,nonultricieselitlacusquisante.Loremipsumdolorsitamet,consecteturadipiscingelit.Aliquampretiumullamcorperurnaquisiaculis.Etiamacmassasedturpistemporluctus.Curabitursednibheuelitmolliscongue.Praesentipsumdiam,consecteturvitaeornarea,aliquamanunc.Inidmagnapellentesquetellusposuereadipiscing.Sednonmimetus,atlaciniaaugue.Sedmagnanisi,ornareinmollisin,mollissednunc.Etiamatjustoinleoconguemollis.Nullaminnequeegetmetushendreritscelerisqueeunonenim.Utmalesuadalacuseunullabibendumideuismodurnasodales.“;$compressed=gzcompress($string);echo“Originalsize:“.strlen($string).”n”;/*輸出原始大小Originalsize:800*/echo“Compressedsize:“.strlen($compressed).”n”;/*輸出壓縮后的大小Compressedsize:418*///解壓縮$original=gzuncompress($compressed);

幾乎有50%壓縮比率。同時(shí),你還可以使用gzencode()和gzdecode()函數(shù)來(lái)壓縮,只不用其用了不同的壓縮算法。

以上就是8個(gè)開(kāi)發(fā)必備的PHP功能,是不是都很實(shí)用呢?

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 祁阳县| 阳新县| 奉节县| 泗洪县| 古蔺县| 江山市| 建平县| 漯河市| 灵寿县| 慈利县| 沁源县| 陆丰市| 翼城县| 娱乐| 池州市| 盐津县| 高密市| 五大连池市| 邵阳市| 麻江县| 自贡市| 特克斯县| 长治市| 四会市| 新绛县| 樟树市| 浪卡子县| 金湖县| 吴川市| 乌鲁木齐市| 萍乡市| 库伦旗| 门头沟区| 都昌县| 乾安县| 清涧县| 陇西县| 武宁县| 石狮市| 泸定县| 永德县|