亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP教程-9個實用的PHP函數

2020-03-24 18:32:42
字體:
來源:轉載
供稿:網友
即使使用 PHP 多年,也會偶然發現一些未曾了解的函數和功能。其中有些是非常有用的,但沒有得到充分利用。并不是所有人都會從頭到尾一頁一頁地閱讀手冊和函數參考!1、任意參數數目的函數你可能已經知道,PHP 允許定義可選參數的函數。但也有完全允許任意數目的函數參數的方法。以下是可選參數的例子:// function with 2 optional argumentsfunction foo($arg1 = '', $arg2 = '') { echo arg1: $arg1/n echo arg2: $arg2/n foo('hello','world');/* prints:arg1: helloarg2: worldfoo();/* prints:arg1:arg2:現在讓我們看看如何建立能夠接受任何參數數目的函數。這一次需要使用 func_get_args() 函數:// yes, the argument list can be emptyfunction foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k = $v) { echo arg .($k+1). : $v/n foo();/* prints nothing */foo('hello');/* printsarg1: hellofoo('hello', 'world', 'again');/* printsarg1: helloarg2: worldarg3: again2、使用 Glob() 查找文件許多 PHP 函數具有長描述性的名稱。然而可能會很難說出 glob() 函數能做的事情,除非你已經通過多次使用并熟悉了它。可以把它看作是比 scandir() 函數更強大的版本,可以按照某種模式搜索文件。// get all php files$files = glob('*.php');print_r($files);/* output looks like:Array [0] = phptest.php [1] = pi.php [2] = post_output.php [3] = test.php你可以像這樣獲得多個文件:// get all php files AND txt files$files = glob('*.{php,txt}', GLOB_BRACE);print_r($files);/* output looks like: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);/* output looks like:Array [0] = ../images/apple.jpg [1] = ../images/art.jpg如果你想獲得每個文件的完整路徑,你可以調用 realpath() 函數: $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:/wamp/www/images/apple.jpg [1] = C:/wamp/www/images/art.jpg3、內存使用信息通過偵測腳本的內存使用情況,有利于代碼的優化。PHP 提供了一個垃圾收集器和一個非常復雜的內存管理器。腳本執行時所使用的內存量,有升有跌。為了得到當前的內存使用情況,我們可以使用 memory_get_usage() 函數。如果需要獲得任意時間點的最高內存使用量,則可以使用 memory_limit() 函數。echo Initial: .memory_get_usage(). bytes /n /* printsInitial: 361400 bytes// let's use up some memoryfor ($i = 0; $i 100000; $i++) { $array []= md5($i);// let's remove half of the arrayfor ($i = 0; $i 100000; $i++) { unset($array[$i]);echo Final: .memory_get_usage(). bytes /n /* printsFinal: 885912 bytesecho Peak: .memory_get_peak_usage(). bytes /n /* printsPeak: 13687072 bytes*/4、CPU 使用信息為此,我們要利用 getrusage() 函數。請記住這個函數不適用于 Windows 平臺。print_r(getrusage());/* printsArray [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: block output operationsru_inblock: block input operationsru_msgsnd: messages sentru_msgrcv: messages receivedru_maxrss: maximum resident set sizeru_ixrss: integral shared memory sizeru_idrss: integral unshared data sizeru_minflt: page reclaimsru_majflt: page faultsru_nsignals: signals receivedru_nvcsw: voluntary context switchesru_nivcsw: involuntary context switchesru_nswap: swapsru_utime.tv_usec: user time used (microseconds)ru_utime.tv_sec: user time used (seconds)ru_stime.tv_usec: system time used (microseconds)ru_stime.tv_sec: system time used (seconds)要知道腳本消耗多少 CPU 功率,我們需要看看 user time 和 system time 兩個參數的值。秒和微秒部分默認是單獨提供的。你可以除以 100 萬微秒,并加上秒的參數值,得到一個十進制的總秒數。讓我們來看一個例子:// 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);/* printsUser time: 0.011552System time: 0盡管腳本運行用了大約 3 秒鐘,CPU 使用率卻非常非常低。因為在睡眠運行的過程中,該腳本實際上不消耗 CPU 資源。還有許多其他的任務,可能需要一段時間,但不占用類似等待磁盤操作等 CPU 時間。因此正如你所看到的,CPU 使用率和運行時間的實際長度并不總是相同的。下面是一個例子:// 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);/* printsUser time: 1.424592System time: 0.004204這花了大約 1.4 秒的 CPU 時間,但幾乎都是用戶時間,因為沒有系統調用。系統時間是指花費在執行程序的系統調用時的 CPU 開銷。下面是一個例子:$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現在我們有相當多的系統時間占用。這是因為腳本多次調用 microtime() 函數,該函數需要向操作系統發出請求,以獲取所需時間。你也可能會注意到運行時間加起來不到 3 秒。這是因為有可能在服務器上同時存在其他進程,并且腳本沒有 100% 使用 CPU 的整個 3 秒持續時間。5、魔術常量 PHP 提供了獲取當前行號 (__LINE__)、文件路徑 (__FILE__)、目錄路徑 (__DIR__)、函數名 (__FUNCTION__)、類名 (__CLASS__)、方法名 (__METHOD__) 和命名空間 (__NAMESPACE__) 等有用的魔術常量。在這篇文章中不作一一介紹,但是我將告訴你一些用例。當包含其他腳本文件時,使用 __FILE__ 常量(或者使用 PHP5.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__ 使得調試更為輕松。你可以跟蹤到具體行號。// some code// ...my_debug( some debug message , __LINE__);/* printsLine 4: some debug message// some more code// ...my_debug( another debug message , __LINE__);/* printsLine 11: another debug messagefunction my_debug($msg, $line) { echo Line $line: $msg/n 6、生成唯一標識符某些場景下,可能需要生成一個唯一的字符串。我看到很多人使用 md5() 函數,即使它并不完全意味著這個目的:// generate unique stringecho md5(time() . mt_rand(1,1000000));There is actually a PHP function named uniqid() that is meant to be used for this.// generate unique stringecho uniqid();/* prints4bd67c947233e// generate another unique stringecho uniqid();/* prints4bd67c9472340你可能會注意到,盡管字符串是唯一的,前幾個字符卻是類似的,這是因為生成的字符串與服務器時間相關。但實際上也存在友好的一方面,由于每個新生成的 ID 會按字母順序排列,這樣排序就變得很簡單。為了減少重復的概率,你可以傳遞一個前綴,或第二個參數來增加熵:// with prefixecho uniqid('foo_');/* printsfoo_4bd67d6cd8b8f// with more entropyecho uniqid('',true);/* prints4bd67d6cd8b926.12135106// bothecho uniqid('bar_',true);/* printsbar_4bd67da367b650.43684647這個函數將產生比 md5() 更短的字符串,能節省一些空間。7、序列化你有沒有遇到過需要在數據庫或文本文件存儲一個復雜變量的情況?你可能沒能想出一個格式化字符串并轉換成數組或對象的好方法,PHP 已經為你準備好此功能。有兩種序列化變量的流行方法。下面是一個例子,使用 serialize() 和 unserialize() 函數:// a complex array$myvar = array( 'hello', array(1,'two'), 'apple'// convert to a string$string = serialize($myvar);echo $string;/* printsa: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 }// you can reproduce the original variable$newvar = unserialize($string);print_r($newvar);/* printsArray [0] = hello [1] = 42 [2] = Array [0] = 1 [1] = two [3] = apple*/這是原生的 PHP 序列化方法。然而,由于 JSON 近年來大受歡迎,PHP5.2 中已經加入了對 JSON 格式的支持?,F在你可以使用 json_encode() 和 json_decode() 函數:// a complex array$myvar = array( 'hello', 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 等許多其他語言兼容。然而對于復雜的對象,某些信息可能會丟失。8、壓縮字符串在談到壓縮時,我們通常想到文件壓縮,如 ZIP 壓縮等。在 PHP 中字符串壓縮也是可能的,但不涉及任何壓縮文件。在下面的例子中,我們要利用 gzcompress() 和 gzuncompress() 函數:$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 /* printsOriginal size: 800echo Compressed size: . strlen($compressed). /n /* printsCompressed size: 418// getting it back$original = gzuncompress($compressed);這種操作的壓縮率能達到 50% 左右。另外的函數 gzencode() 和 gzdecode() 能達到類似結果,通過使用不同的壓縮算法。9、注冊停止功能有一個函數叫做 register_shutdown_function(),可以讓你在某段腳本完成運行之前,執行一些指定代碼。假設你需要在腳本執行結束前捕獲一些基準統計信息,例如運行的時間長度:// capture the start time$start_time = microtime(true);// do some stuff// ...// display how long the script tookecho execution took: . (microtime(true) - $start_time). seconds. 這似乎微不足道,你只需要在腳本運行的最后添加相關代碼。但是如果你調用過 exit() 函數,該代碼將無法運行。此外,如果有一個致命的錯誤,或者腳本被用戶意外終止,它可能無法再次運行。當你使用 register_shutdown_function() 函數,代碼將繼續執行,不論腳本是否停止運行:$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. }英文原稿:9 Useful PHP Functions and Features You Need to Know | Nettuts
html教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频一区二区三区| 亚洲激情免费观看| 最近2019中文字幕一页二页| 亚洲精品黄网在线观看| 亚洲人在线观看| 日韩不卡中文字幕| 久久久亚洲欧洲日产国码aⅴ| 韩剧1988免费观看全集| 欧美人交a欧美精品| 最近中文字幕日韩精品| 久久五月天色综合| 精品国产999| 福利视频导航一区| 国内精品久久久久久影视8| 亚洲综合中文字幕在线| 国产91精品不卡视频| 成人黄色av免费在线观看| 欧美极度另类性三渗透| 久久精品人人爽| 亚洲一区二区三区在线视频| 亚洲精品日韩久久久| 久久亚洲精品国产亚洲老地址| 欧美精品少妇videofree| 亚洲国产小视频在线观看| 欧美日韩另类视频| 国产精品丝袜久久久久久高清| www.久久久久| 亚洲精品色婷婷福利天堂| 91中文字幕在线| 久久久久久久久爱| 国产日韩在线视频| 性色av香蕉一区二区| 亚洲国产中文字幕久久网| 国产精品扒开腿做爽爽爽视频| 欧美怡春院一区二区三区| 国产精品扒开腿做| 成人性教育视频在线观看| 国产日韩欧美91| 亚洲一区中文字幕在线观看| www.欧美三级电影.com| 4438全国亚洲精品在线观看视频| 欧美综合一区第一页| 51色欧美片视频在线观看| 欧美高清视频一区二区| 精品久久久一区| 一区二区国产精品视频| 日本一区二区不卡| 热门国产精品亚洲第一区在线| 欧美黑人极品猛少妇色xxxxx| 国产伦精品免费视频| 精品久久久久久久久中文字幕| 欧美夜福利tv在线| 91久久久国产精品| 亚洲精品久久久久| 国产精品久久久久久婷婷天堂| 欧美一区深夜视频| 欧美在线视频观看| 欧美激情精品久久久久久免费印度| 日韩成人小视频| 狠狠躁18三区二区一区| 国产亚洲欧美日韩一区二区| 欧美色视频日本高清在线观看| 在线视频日韩精品| 国产九九精品视频| 亚洲欧洲一区二区三区久久| 亚洲免费影视第一页| 91精品久久久久久久久中文字幕| 欧美极品美女视频网站在线观看免费| 91精品国产综合久久香蕉922| 在线不卡国产精品| 久久久亚洲精选| 欧美极品美女电影一区| 欧美一区二区三区免费视| xx视频.9999.com| 亚洲va欧美va在线观看| 九九九热精品免费视频观看网站| 91精品国产色综合久久不卡98| 欧美另类老女人| 欧美日韩美女视频| 欧美成人精品一区二区| 国内精品视频久久| 性欧美在线看片a免费观看| xvideos国产精品| 成人午夜激情网| 九九精品视频在线观看| 国产成人短视频| 九九久久国产精品| 成人免费大片黄在线播放| 欧美日韩国产一区二区| 亚洲精品美女在线观看| 欧美激情免费视频| 国产日韩欧美一二三区| 日韩精品中文在线观看| 成人黄色片在线| 91综合免费在线| 亚洲精品美女网站| 久色乳综合思思在线视频| 91av视频在线播放| 欧美日韩国产精品一区二区不卡中文| 精品视频在线播放免| 少妇高潮久久77777| 亚洲在线免费观看| 中文字幕精品一区久久久久| 韩剧1988在线观看免费完整版| 不卡毛片在线看| 国内精品久久久久久| 2024亚洲男人天堂| 亚洲国产日韩欧美在线图片| 91美女片黄在线观| 狠狠久久五月精品中文字幕| 日本在线精品视频| 91亚洲国产精品| 色悠久久久久综合先锋影音下载| 国产欧洲精品视频| 法国裸体一区二区| 亚洲欧美一区二区三区情侣bbw| 日韩欧美高清视频| 97香蕉超级碰碰久久免费软件| 欧美日韩国产精品专区| 色偷偷偷亚洲综合网另类| 久久91精品国产91久久跳| 亚洲电影免费观看高清完整版在线| 一区二区三区美女xx视频| 亚洲女人天堂视频| 黑人精品xxx一区一二区| 日韩精品在线观看视频| 国产日韩精品一区二区| 亚洲免费福利视频| 日韩视频免费大全中文字幕| 欧美精品videofree1080p| 成人av资源在线播放| 亚洲性视频网站| 亚洲女人天堂视频| 亚洲va国产va天堂va久久| 狠狠久久五月精品中文字幕| 91豆花精品一区| 九九热在线精品视频| 日韩中文在线观看| 亚州欧美日韩中文视频| 久久深夜福利免费观看| 国产精品久久久久久亚洲调教| 亚洲free性xxxx护士hd| 精品久久久久久久久久久| 久久久久久久久久久免费精品| 亚洲国产精品大全| 日韩免费在线看| 韩国福利视频一区| 97成人精品区在线播放| 日韩av免费一区| 福利一区视频在线观看| 欧美日韩加勒比精品一区| 成人性生交大片免费观看嘿嘿视频| 成人美女免费网站视频| 81精品国产乱码久久久久久| 国产日韩欧美中文| 中文字幕不卡av| 91精品免费看| 欧美天天综合色影久久精品| 日韩av在线免费观看一区| 欧美色欧美亚洲高清在线视频| 国产精品久久久久久久7电影| 国产精品九九久久久久久久| 日韩va亚洲va欧洲va国产| 麻豆国产va免费精品高清在线|