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

首頁 > 編程 > PHP > 正文

九個PHP很有用的功能

2020-03-22 18:11:09
字體:
來源:轉載
供稿:網友
  • 下面是九個PHP中很有用的功能,不知道你用過了嗎?

    1. 函數的任意數目的參數

    你可能知道PHP允許你定義一個默認參數的函數。但你可能并不知道PHP還允許你定義一個完全任意的參數的函數

    下面是一個示例向你展示了默認參數的函數:


    // 兩個默認參數的函數function foo($arg1 = '', $arg2 = '') {     echo "arg1: $arg1/n";    echo "arg2: $arg2/n"; } foo('hello','world');/* 輸出:arg1: helloarg2: world*/ foo();/* 輸出:arg1:arg2:*/

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

    // 是的,形參列表為空function foo() {     // 取得所有的傳入參數的數組    $args = func_get_args();     foreach ($args as $k => $v) {        echo "arg".($k+1).": $v/n";    } } foo();/* 什么也不會輸出 */ foo('hello');/* 輸出arg1: hello*/ foo('hello', 'world', 'again');/* 輸出arg1: helloarg2: worldarg3: again*/

    2. 使用 Glob() 查找文件
    很多PHP的函數都有一個比較長的自解釋的函數名,但是,當你看到?glob() 的時候,你可能并不知道這個函數是用來干什么的,除非你對它已經很熟悉了。

    你可以認為這個函數就好?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)*/

    如果你想得到絕對路徑,你可以調用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.jpg)*/

    3. 內存使用信息
    觀察你程序的內存使用能夠讓你更好的優化你的代碼。

    PHP 是有垃圾回收機制的,而且有一套很復雜的內存管理機制。你可以知道你的腳本所使用的內存情況。要知道當前內存使用情況,你可以使用memory_get_usage() 函數,如果你想知道使用內存的峰值,你可以調用memory_get_peak_usage() 函數。

    echo "Initial: ".memory_get_usage()." bytes /n";/* 輸出Initial: 361400 bytes*/ // 使用內存for ($i = 0; $i < 100000; $i++) {    $array []= md5($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() 函數可以讓你知道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) */

    這個結構看上出很晦澀,除非你對CPU很了解。下面一些解釋:

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

    要看到你的腳本消耗了多少CPU,我們需要看看“用戶態的時間”和“系統內核時間”的值。秒和微秒部分是分別提供的,您可以把微秒值除以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); /* 輸出User time: 0.011552System time: 0

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

    // 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時間,幾乎所有的都是用戶的時間,因為沒有系統調用。

    系統時間是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*/

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


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

    我們可以以為這些東西主要是用于調試,當也不一定,比如我們可以在include其它文件的時候使用?__FILE__ (當然,你也可以在 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的信息,這樣有助于你調試程序:

    // 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: $msg/n";}

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

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

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

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

    可能你會注意到生成出來的ID前幾位是一樣的,這是因為生成器依賴于系統的時間,這其實是一個非常不錯的功能,因為你是很容易為你的這些ID排序的。這點MD5是做不到的。

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

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

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


    7. 序列化
    你是否會把一個比較復雜的數據結構存到數據庫或是文件中?你并不需要自己去寫自己的算法。PHP早已為你做好了,其提供了兩個函數:serialize() 和 unserialize():

    // 一個復雜的數組$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的原生函數,然而在今天JSON越來越流行,所以在PHP5.2以后,PHP開始支持JSON,你可以使用 json_encode() 和 json_decode() 函數

    這看起來更為緊湊一些了,而且還兼容Javascript和其它語言。但是對于一些非常復雜的數據結構,可能會造成數據丟失。 www.it165.net

    // 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)*/

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

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

    $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);

    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.";}

    PHP編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    亚洲欧美日本伦理| 亚洲风情亚aⅴ在线发布| 国产精品视频区| 欧美亚洲国产日韩2020| 欧美视频在线视频| 亚洲第一视频网站| 亚洲性视频网站| 欧美老女人性生活| 久久久久久久久久国产| 亚洲free性xxxx护士白浆| 国内成人精品视频| 欧美极度另类性三渗透| 欧美性猛交xxxx免费看漫画| 狠狠躁夜夜躁久久躁别揉| 国产精品久久国产精品99gif| 欧美午夜女人视频在线| 色久欧美在线视频观看| 中文字幕亚洲一区在线观看| 日韩免费观看在线观看| 北条麻妃99精品青青久久| 美女撒尿一区二区三区| 亚洲天堂男人天堂| 亚洲国产精品成人av| 久青草国产97香蕉在线视频| 精品国产一区av| 国产午夜精品全部视频在线播放| 国产精品三级美女白浆呻吟| 久久激情五月丁香伊人| 91久久久久久久一区二区| 亚洲精品久久久久中文字幕二区| 欧美老肥婆性猛交视频| 久久久亚洲影院| 狠狠综合久久av一区二区小说| 国产精品视频中文字幕91| 国产一区二区免费| 深夜成人在线观看| 久久综合免费视频| 中文字幕日韩av| 国产精品第七影院| 成人免费视频在线观看超级碰| 粉嫩av一区二区三区免费野| 欧美激情视频在线免费观看 欧美视频免费一| 国产欧美一区二区三区四区| 国产日韩在线视频| 亚洲变态欧美另类捆绑| 亚洲色图18p| 亚洲国产高清高潮精品美女| 日本一欧美一欧美一亚洲视频| 日韩www在线| 久久影视免费观看| xvideos亚洲人网站| 亚洲第一中文字幕在线观看| 欧美成人全部免费| 亚洲影视中文字幕| 欧美亚洲国产成人精品| 久久视频在线免费观看| 久热99视频在线观看| 久久夜精品香蕉| 久久香蕉国产线看观看网| 亚洲一区二区三区在线免费观看| 欧美性高潮在线| 国产成人精品电影| 在线丨暗呦小u女国产精品| 在线播放日韩欧美| 国产视频福利一区| 这里只有精品视频| 欧美一区二粉嫩精品国产一线天| 日韩成人av在线播放| 欧美有码在线视频| 日韩免费在线播放| 2019亚洲日韩新视频| 日本精品免费观看| 最近2019年日本中文免费字幕| 亚洲少妇中文在线| 成人写真视频福利网| 国产精品自拍小视频| 欧美成人免费小视频| 91精品在线看| 日韩视频免费大全中文字幕| 午夜精品久久久久久久男人的天堂| 国产精品久久久久久av下载红粉| 亚洲欧美精品伊人久久| 欧美电影免费观看大全| 久久精品久久久久久| 国产精品日韩在线播放| 91国产视频在线| 国产婷婷成人久久av免费高清| 日韩欧中文字幕| 狠狠久久五月精品中文字幕| 国产女人精品视频| 亚洲欧美成人精品| 日韩精品中文字幕视频在线| 欧美裸体男粗大视频在线观看| 久久久99久久精品女同性| 91高清视频在线免费观看| 九九精品在线观看| 91大神福利视频在线| 在线观看视频99| 亚洲精品wwwww| 91精品国产91久久久| 久久精品国产综合| 国产一区二区av| 91精品久久久久久久久久入口| 欧美激情精品久久久久久免费印度| 日韩中文字幕在线观看| 亚洲天堂久久av| 亚洲人成77777在线观看网| 中文字幕日韩av| 欧美激情精品在线| 国产成人精品亚洲精品| 亚洲精品v天堂中文字幕| 亚洲黄色免费三级| 亚洲一区二区三区四区在线播放| 亚洲欧美日本伦理| 色与欲影视天天看综合网| 欧美激情在线观看| 亚洲欧美另类国产| 亲爱的老师9免费观看全集电视剧| 日本午夜在线亚洲.国产| 91精品国产91久久久久| 91中文字幕一区| 九九热这里只有精品免费看| 国产精品福利观看| 欧美成年人网站| 色综合男人天堂| 538国产精品视频一区二区| 久久亚洲春色中文字幕| 色噜噜亚洲精品中文字幕| 亚洲天堂色网站| 久久免费视频在线| 日韩av理论片| 亚洲欧美日韩直播| 久久91精品国产91久久久| 国产精品久久久久久久久久久久| 国产精品视频999| 成人免费视频在线观看超级碰| 亚洲国内精品视频| 九九热r在线视频精品| 国产精品va在线播放我和闺蜜| 国产一区视频在线播放| 国产日韩欧美综合| 91精品国产一区| 久久九九热免费视频| 少妇高潮久久久久久潘金莲| 欧美在线视频观看免费网站| 亚洲区一区二区| 欧美黄色片在线观看| 91性高湖久久久久久久久_久久99| 久久成人一区二区| 国产精品18久久久久久麻辣| 欧亚精品中文字幕| 亚洲变态欧美另类捆绑| 欧美国产日本在线| 2019中文字幕在线观看| 久久精品一偷一偷国产| 91久久精品在线| 97av视频在线| 欧美色图在线视频| 人人澡人人澡人人看欧美| 久久影院资源网| 国产69久久精品成人| 亚洲一区精品电影| 在线电影欧美日韩一区二区私密| 国产精品久久久久久av福利|