电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

九個很有用的PHP代碼

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

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

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

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

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

// 兩個默認參數(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ù)名,但是,當你看到?glob() 的時候,你可能并不知道這個函數(shù)是用來干什么的,除非你對它已經(jīng)很熟悉了。

你可以認為這個函數(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 是有垃圾回收機制的,而且有一套很復雜的內(nèi)存管理機制。你可以知道你的腳本所使用的內(nèi)存情況。要知道當前內(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時間,幾乎所有的都是用戶的時間,因為沒有系統(tǒng)調(diào)用。

系統(tǒng)時間是CPU花費在系統(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)常量 可以讓你得到當前的行號 (__LINE__),文件 (__FILE__),目錄 (__DIR__),函數(shù)名 (__FUNCTION__),類名(__CLASS__),方法名(__METHOD__) 和名字空間 (__NAMESPACE__),很像C語言。

我們可以以為這些東西主要是用于調(diào)試,當也不一定,比如我們可以在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的信息,這樣有助于你調(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));

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

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

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

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

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

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

7. 序列化

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

// 一個復雜的數(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和其它語言。但是對于一些非常復雜的數(shù)據(jù)結(jié)構(gòu),可能會造成數(shù)據(jù)丟失。

8. 字符串壓縮

當我們說到壓縮,我們可能會想到文件壓縮,其實,字符串也是可以壓縮的。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(),可以讓你在整個腳本停時前運行代碼。讓我們看下面的一個示例:

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

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

而當我們使用了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
相關(guān)文章:
主站蜘蛛池模板: 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 密封无忧网 _ 专业的密封产品行业信息网 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 转向助力泵/水泵/发电机皮带轮生产厂家-锦州华一精工有限公司 | 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 艺术漆十大品牌_艺术涂料加盟代理_蒙太奇艺术涂料厂家品牌|艺术漆|微水泥|硅藻泥|乳胶漆 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | 气动隔膜泵-电动隔膜泵-循环热水泵-液下排污/螺杆/管道/化工泵「厂家」浙江绿邦 | 办公室家具公司_办公家具品牌厂家_森拉堡办公家具【官网】 | 深圳3D打印服务-3D打印加工-手板模型加工厂-悟空打印坊 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 餐饮加盟网_特色餐饮连锁加盟店-餐饮加盟官网 | 周口市风机厂,周鼓风机,河南省周口市风机厂 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 不发火防静电金属骨料_无机磨石_水泥自流平_修补砂浆厂家「圣威特」 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 风淋室生产厂家报价_传递窗|送风口|臭氧机|FFU-山东盛之源净化设备 | 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 主题班会网 - 安全教育主题班会,各类主题班会PPT模板 | 橡胶弹簧|复合弹簧|橡胶球|振动筛配件-新乡市永鑫橡胶厂 | 上海刑事律师|刑事辩护律师|专业刑事犯罪辩护律师免费咨询-[尤辰荣]金牌上海刑事律师团队 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 亚洲工业智能制造领域专业门户网站 - 亚洲自动化与机器人网 | 防潮防水通风密闭门源头实力厂家 - 北京酷思帝克门窗 |