日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

九個很有用的PHP代碼

瀏覽:161日期:2022-09-11 17:05:29

下面是九個PHP中很有用的功能,不知道你用過了嗎?

1. 函數(shù)的任意數(shù)目的參數(shù)

你可能知道PHP允許你定義一個默認(rèn)參數(shù)的函數(shù)。但你可能并不知道PHP還允許你定義一個完全任意的參數(shù)的函數(shù)

下面是一個示例向你展示了默認(rèn)參數(shù)的函數(shù):

// 兩個默認(rèn)參數(shù)的函數(shù)function foo($arg1 = ’’, $arg2 = ’’) {echo "arg1: $arg1n";echo "arg2: $arg2n";}foo(’hello’,’world’);/* 輸出:arg1: helloarg2: world*/foo();/* 輸出:arg1:arg2:*/

現(xiàn)在我們來看一看一個不定參數(shù)的函數(shù),其使用到了?func_get_args()方法:

// 是的,形參列表為空function foo() {// 取得所有的傳入?yún)?shù)的數(shù)組$args = func_get_args();foreach ($args as $k => $v) {echo "arg".($k+1).": $vn";}}foo();/* 什么也不會輸出 */foo(’hello’);/* 輸出arg1: hello*/foo(’hello’, ’world’, ’again’);/* 輸出arg1: helloarg2: worldarg3: again*/2. 使用 Glob() 查找文件

很多PHP的函數(shù)都有一個比較長的自解釋的函數(shù)名,但是,當(dāng)你看到?glob() 的時候,你可能并不知道這個函數(shù)是用來干什么的,除非你對它已經(jīng)很熟悉了。

你可以認(rèn)為這個函數(shù)就好?scandir() 一樣,其可以用來查找文件。

// 取得所有的后綴為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.txt)*/

你還可以加上路徑:

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

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

$files = glob(’../images/a*.jpg’);// applies the function to each array element$files = array_map(’realpath’,$files);print_r($files);/* output looks like:Array( [0] => C:wampwwwimagesapple.jpg [1] => C:wampwwwimagesart.jpg)*/3. 內(nèi)存使用信息

觀察你程序的內(nèi)存使用能夠讓你更好的優(yōu)化你的代碼。

PHP 是有垃圾回收機(jī)制的,而且有一套很復(fù)雜的內(nèi)存管理機(jī)制。你可以知道你的腳本所使用的內(nèi)存情況。要知道當(dāng)前內(nèi)存使用情況,你可以使用?memory_get_usage() 函數(shù),如果你想知道使用內(nèi)存的峰值,你可以調(diào)用memory_get_peak_usage() 函數(shù)。

echo "Initial: ".memory_get_usage()." bytes n";/* 輸出Initial: 361400 bytes*/// 使用內(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()." bytes n";/* printsFinal: 885912 bytes*/echo "Peak: ".memory_get_peak_usage()." bytes n";/* 輸出峰值Peak: 13687072 bytes*/4. CPU使用信息

使用?getrusage() 函數(shù)可以讓你知道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)*/

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

ru_oublock: 塊輸出操作ru_inblock: 塊輸入操作ru_msgsnd: 發(fā)送的messageru_msgrcv: 收到的messageru_maxrss: 最大駐留集大小ru_ixrss: 全部共享內(nèi)存大小ru_idrss:全部非共享內(nèi)存大小ru_minflt: 頁回收ru_majflt: 頁失效ru_nsignals: 收到的信號ru_nvcsw: 主動上下文切換ru_nivcsw: 被動上下文切換ru_nswap: 交換區(qū)ru_utime.tv_usec: 用戶態(tài)時間 (microseconds)ru_utime.tv_sec: 用戶態(tài)時間(seconds)ru_stime.tv_usec: 系統(tǒng)內(nèi)核時間 (microseconds)ru_stime.tv_sec: 系統(tǒng)內(nèi)核時間?(seconds)

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

// sleep for 3 seconds (non-busy)sleep(3);$data = getrusage();echo "User time: ".($data[’ru_utime.tv_sec’] +$data[’ru_utime.tv_usec’] / 1000000);echo "System time: ".($data[’ru_stime.tv_sec’] +$data[’ru_stime.tv_usec’] / 1000000);/* 輸出User time: 0.011552System time: 0*/

sleep是不占用系統(tǒng)時間的,我們可以來看下面的一個例子:

// loop 10 million times (busy)for($i=0;$i<10000000;$i++) {}$data = getrusage();echo "User time: ".($data[’ru_utime.tv_sec’] +$data[’ru_utime.tv_usec’] / 1000000);echo "System time: ".($data[’ru_stime.tv_sec’] +$data[’ru_stime.tv_usec’] / 1000000);/* 輸出User time: 1.424592System time: 0.004204*/

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

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

$start = microtime(true);// keep calling microtime for about 3 secondswhile(microtime(true) - $start < 3) {}$data = getrusage();echo "User time: ".($data[’ru_utime.tv_sec’] +$data[’ru_utime.tv_usec’] / 1000000);echo "System time: ".($data[’ru_stime.tv_sec’] +$data[’ru_stime.tv_usec’] / 1000000);/* printsUser time: 1.088171System time: 1.675315*/

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

5. 系統(tǒng)常量

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

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

// this is relative to the loaded script’s path// it may cause problems when running scripts from different directoriesrequire_once(’config/database.php’);// this is always relative to this file’s path// no matter where it was included fromrequire_once(dirname(__FILE__) . ’/config/database.php’);

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

// some code// ...my_debug("some debug message", __LINE__);/* 輸出Line 4: some debug message*/// some more code// ...my_debug("another debug message", __LINE__);/* 輸出Line 11: another debug message*/function my_debug($msg, $line) {echo "Line $line: $msgn";}6.生成唯一的ID

有很多人使用 md5() 來生成一個唯一的ID,如下所示:

// generate unique stringecho md5(time() . mt_rand(1,1000000));

其實(shí),PHP中有一個叫?uniqid() 的函數(shù)是專門用來干這個的:

// generate unique stringecho uniqid();/* 輸出4bd67c947233e*/// generate another unique stringecho uniqid();/* 輸出4bd67c9472340*/

可能你會注意到生成出來的ID前幾位是一樣的,這是因?yàn)樯善饕蕾囉谙到y(tǒng)的時間,這其實(shí)是一個非常不錯的功能,因?yàn)槟闶呛苋菀诪槟愕倪@些ID排序的。這點(diǎn)MD5是做不到的。

你還可以加上前綴避免重名:

// 前綴echo uniqid(’foo_’);/* 輸出foo_4bd67d6cd8b8f*/// 有更多的熵echo uniqid(’’,true);/* 輸出4bd67d6cd8b926.12135106*/// 都有echo uniqid(’bar_’,true);/* 輸出bar_4bd67da367b650.43684647*/

而且,生成出來的ID會比MD5生成的要短,這會讓你節(jié)省很多空間。

7. 序列化

你是否會把一個比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)存到數(shù)據(jù)庫或是文件中?你并不需要自己去寫自己的算法。PHP早已為你做好了,其提供了兩個函數(shù):?serialize() 和 unserialize():

// 一個復(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)*/

這是PHP的原生函數(shù),然而在今天JSON越來越流行,所以在PHP5.2以后,PHP開始支持JSON,你可以使用 json_encode() 和 json_decode() 函數(shù)

// a complex array$myvar = array(’hello’,42,array(1,’two’),’apple’);// convert to a string$string = json_encode($myvar);echo $string;/* prints["hello",42,[1,"two"],"apple"]*/// you can reproduce the original variable$newvar = json_decode($string);print_r($newvar);/* printsArray( [0] => hello [1] => 42 [2] => Array( [0] => 1 [1] => two) [3] => apple)*/

這看起來更為緊湊一些了,而且還兼容于Javascript和其它語言。但是對于一些非常復(fù)雜的數(shù)據(jù)結(jié)構(gòu),可能會造成數(shù)據(jù)丟失。

8. 字符串壓縮

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

$string ="Lorem ipsum dolor sit amet, consecteturadipiscing elit. Nunc ut elit id mi ultriciesadipiscing. Nulla facilisi. Praesent pulvinar,sapien vel feugiat vestibulum, nulla dui pretium orci,non ultricies elit lacus quis ante. Lorem ipsum dolorsit amet, consectetur adipiscing elit. Aliquampretium ullamcorper urna quis iaculis. Etiam ac massased turpis tempor luctus. Curabitur sed nibh eu elitmollis congue. Praesent ipsum diam, consectetur vitaeornare a, aliquam a nunc. In id magna pellentesquetellus posuere adipiscing. Sed non mi metus, at laciniaaugue. Sed magna nisi, ornare in mollis in, mollissed nunc. Etiam at justo in leo congue mollis.Nullam in neque eget metus hendrerit scelerisqueeu non enim. Ut malesuada lacus eu nulla bibendumid euismod urna sodales. ";$compressed = gzcompress($string);echo "Original size: ". strlen($string)."n";/* 輸出原始大小Original size: 800*/echo "Compressed size: ". strlen($compressed)."n";/* 輸出壓縮后的大小Compressed size: 418*/// 解壓縮$original = gzuncompress($compressed);

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

9. 注冊停止函數(shù)

有一個函數(shù)叫做?register_shutdown_function(),可以讓你在整個腳本停時前運(yùn)行代碼。讓我們看下面的一個示例:

// capture the start time$start_time = microtime(true);// do some stuff// ...// display how long the script tookecho "execution took: ".(microtime(true) - $start_time)." seconds.";

上面這個示例只不過是用來計(jì)算某個函數(shù)運(yùn)行的時間。然后,如果你在函數(shù)中間調(diào)用?exit() 函數(shù),那么你的最后的代碼將不會被運(yùn)行到。并且,如果該腳本在瀏覽器終止(用戶按停止按鈕),其也無法被運(yùn)行。

而當(dāng)我們使用了register_shutdown_function()后,你的程序就算是在腳本被停止后也會被運(yùn)行:

$start_time = microtime(true);register_shutdown_function(’my_shutdown’);// do some stuff// ...function my_shutdown() {global $start_time;echo "execution took: ".(microtime(true) - $start_time)." seconds.";}

文章:來源

標(biāo)簽: PHP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
999视频精品| 日韩视频一区二区三区在线播放免费观看| 国产精品视频3p| 日本免费在线视频不卡一不卡二| 亚洲夜间福利| 婷婷综合五月| 欧美一级久久| 精品国产一区二区三区av片| 国产欧美日韩一区二区三区四区| 亚洲激情偷拍| 国产一区二区中文| 欧美精品高清| 久久激情婷婷| 尤物在线精品| 日韩精品一级二级| 免费在线观看日韩欧美| 日韩精品网站| 婷婷亚洲五月| 日韩国产91| 欧美激情视频一区二区三区免费| 欧美日韩xxxx| 夜夜嗨一区二区| 日韩精品麻豆| а√在线中文在线新版| 精品国产一区二区三区性色av| 国产精品分类| 亚洲爱爱视频| 国产调教一区二区三区| 狠狠干综合网| 亚洲欧美成人综合| 日韩欧美三级| 日本国产亚洲| 久久久亚洲一区| 欧美a在线观看| 中文字幕亚洲精品乱码| 精品精品99| 国产欧美丝祙| 91成人精品在线| 婷婷中文字幕一区| 欧美一级二区| 亚洲精品美女91| 日韩精品一区二区三区免费视频 | 亚洲有吗中文字幕| 黄色日韩在线| 日韩精品欧美大片| 久久精品色播| 日韩欧美激情电影| 日韩一二三区在线观看| 国产自产自拍视频在线观看 | 欧美精品不卡| 亚洲精品美女| 欧美黄页在线免费观看| 亚洲综合在线电影| 日日摸夜夜添夜夜添国产精品| 国产精品videossex久久发布| 国产精品婷婷| 日韩欧美二区| 欧美福利在线| 成人啊v在线| 久久中文字幕av| 久久国产免费| 亚洲精品护士| av亚洲免费| 亚洲综合不卡| 午夜久久福利| 日韩精品一区二区三区免费观看| 久久久久久黄| 国产精品对白| 欧美日本精品| 亚洲欧洲日韩| 91亚洲自偷观看高清| 久久狠狠久久| 特黄特色欧美大片| 99在线精品免费视频九九视| 亚洲一区二区三区高清| 日韩区欧美区| 日韩欧美三级| 久久国产中文字幕| 日本激情一区| 国产一区二区三区不卡av| 日韩视频网站在线观看| 91精品韩国| 91久久中文| 四虎4545www国产精品| 亚洲深夜视频| 久久国产精品免费一区二区三区| 日韩精品久久久久久久软件91| 亚洲综合小说| 日韩美女国产精品| 国产一卡不卡| 国产精品mm| 在线亚洲激情| 精品视频高潮| 91精品国产自产精品男人的天堂| 国产99久久| 日韩高清不卡一区| 欧美激情一区| 久久在线免费| 视频一区中文字幕精品| 精品亚洲美女网站| 精品美女视频| 99视频一区| 视频在线在亚洲| 精品美女在线视频| 国产精品白丝久久av网站 | 欧美不卡在线| 亚洲精品黄色| 国产精品激情| 久久久人人人| 天堂成人免费av电影一区| 免费人成在线不卡| xxxxx性欧美特大| 影音先锋久久| 久久精品不卡| 久久精品国产99久久| 蜜臀国产一区| 成人精品亚洲| 亚州av日韩av| 97久久超碰| 国产伦理一区| 福利一区在线| 久久激情婷婷| 免费日韩成人| 亚洲aa在线| 亚洲精选91| 国产精品一区二区三区四区在线观看| 国产乱人伦丫前精品视频| 国产aⅴ精品一区二区四区| 亚洲一区二区成人| 国内在线观看一区二区三区 | 精品国产18久久久久久二百| 久久精品免视看国产成人| 久久精品动漫| 亚洲精品高潮| 水蜜桃久久夜色精品一区| 亚洲一区二区动漫| 欧美精品影院| 国户精品久久久久久久久久久不卡 | 国产精品中文字幕制服诱惑| 久久精品国内一区二区三区水蜜桃| 亚洲精品欧美| 国产一区二区三区不卡av| 日韩午夜av在线| 国产一区二区三区91| 中文字幕一区日韩精品| 久久中文字幕av一区二区不卡| 国产精品一区二区精品| 欧美日韩精品免费观看视频完整| 亚洲精品伊人| 欧美日韩国产在线一区| 国产精品xxxav免费视频| 99综合视频| 精品亚洲二区| 亚洲v天堂v手机在线| 精品在线播放| 欧美激情在线精品一区二区三区| 日韩在线观看| 香蕉视频成人在线观看| 91精品亚洲| xxxxx性欧美特大| 中文字幕一区二区三区四区久久| 国产精品自在| 精品亚洲精品| 亚洲自啪免费| 国产精品xxx在线观看| 四虎884aa成人精品最新| 国产a亚洲精品| 日韩av二区在线播放| 鲁大师成人一区二区三区| 亚洲一二av| 色黄视频在线观看| 中文在线а√天堂| aa国产精品| 亚洲h色精品| 亚洲色诱最新| 欧美~级网站不卡| 激情欧美日韩一区| 成人av三级| 欧美黄色一区| 老牛国产精品一区的观看方式| 另类国产ts人妖高潮视频| 日韩黄色av| 日本а中文在线天堂| 久久免费高清| 久久av超碰| 国产伦理一区| 日韩av中文字幕一区二区 | 精品国产网站| 激情国产在线| 一区二区91| 免费在线欧美黄色| 欧美.日韩.国产.一区.二区 | 日韩精品一二三区| 国产精品久久久久久久免费软件 | 美女精品一区| 欧美国产视频| 亚洲视频国产精品| 日本视频一区二区| 亚洲五月综合| 久久久精品五月天|