9个PHP开发常用功能函数小结
2023-06-13 09:14:29 时间
1.函数的任意数目的参数
你可能知道PHP允许你定义一个默认参数的函数。但你可能并不知道PHP还允许你定义一个完全任意的参数的函数
下面是一个示例向你展示了默认参数的函数:
复制代码代码如下:
你可能知道PHP允许你定义一个默认参数的函数。但你可能并不知道PHP还允许你定义一个完全任意的参数的函数
下面是一个示例向你展示了默认参数的函数:
//两个默认参数的函数
functionfoo($arg1="",$arg2=""){
echo"arg1:$arg1\n";
echo"arg2:$arg2\n";
}
foo("hello","world");
/*输出:
arg1:hello
arg2:world
*/
foo();
/*输出:
arg1:
arg2:
*/
现在我们来看一看一个不定参数的函数,其使用到了?func_get_args()方法:
//是的,形参列表为空
functionfoo(){
//取得所有的传入参数的数组
$args=func_get_args();
foreach($argsas$k=>$v){
echo"arg".($k+1).":$v\n";
}
}
foo();
/*什么也不会输出*/
foo("hello");
/*输出
arg1:hello
*/
foo("hello","world","again");
/*输出
arg1:hello
arg2:world
arg3: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");
//appliesthefunctiontoeacharrayelement
$files=array_map("realpath",$files);
print_r($files);
/*outputlookslike:
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:361400bytes
*/
//使用内存
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";
/*prints
Final:885912bytes
*/
echo"Peak:".memory_get_peak_usage()."bytes\n";
/*输出峰值
Peak:13687072bytes
*/
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:发送的message
ru_msgrcv:收到的message
ru_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万,并把它添加到秒的值后,可以得到有小数部分的秒数。
//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.011552
Systemtime:0
*/
sleep是不占用系统时间的,我们可以来看下面的一个例子:
//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.424592
Systemtime:0.004204
*/
这花了大约14秒的CPU时间,几乎所有的都是用户的时间,因为没有系统调用。
系统时间是CPU花费在系统调用上的上执行内核指令的时间。下面是一个例子:
$start=microtime(true);
//keepcallingmicrotimeforabout3seconds
while(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);
/*prints
Usertime:1.088171
Systemtime:1.675315
*/
我们可以看到上面这个例子更耗CPU。
5.系统常量
PHP提供非常有用的系统常量可以让你得到当前的行号(__LINE__),文件(__FILE__),目录(__DIR__),函数名(__FUNCTION__),类名(__CLASS__),方法名(__METHOD__)和名字空间(__NAMESPACE__),很像C语言。
我们可以以为这些东西主要是用于调试,当也不一定,比如我们可以在include其它文件的时候使用?__FILE__(当然,你也可以在PHP5.3以后使用__DIR__),下面是一个例子。
//thisisrelativetotheloadedscript"spath
//itmaycauseproblemswhenrunningscriptsfromdifferentdirectories
require_once("config/database.php");
//thisisalwaysrelativetothisfile"spath
//nomatterwhereitwasincludedfrom
require_once(dirname(__FILE__)."/config/database.php");
下面是使用__LINE__来输出一些debug的信息,这样有助于你调试程序:
//somecode
//...
my_debug("somedebugmessage",__LINE__);
/*输出
Line4:somedebugmessage
*/
//somemorecode
//...
my_debug("anotherdebugmessage",__LINE__);
/*输出
Line11:anotherdebugmessage
*/
functionmy_debug($msg,$line){
echo"Line$line:$msg\n";
}
6.生成唯一的ID
有很多人使用md5()来生成一个唯一的ID,如下所示:
//generateuniquestring
echomd5(time().mt_rand(1,1000000));
其实,PHP中有一个叫?uniqid()的函数是专门用来干这个的:
//generateuniquestring
echouniqid();
/*输出
4bd67c947233e
*/
//generateanotheruniquestring
echouniqid();
/*输出
4bd67c9472340
*/
可能你会注意到生成出来的ID前几位是一样的,这是因为生成器依赖于系统的时间,这其实是一个非常不错的功能,因为你是很容易为你的这些ID排序的。这点MD5是做不到的。
你还可以加上前缀避免重名:
//前缀
echouniqid("foo_");
/*输出
foo_4bd67d6cd8b8f
*/
//有更多的熵
echouniqid("",true);
/*输出
4bd67d6cd8b926.12135106
*/
//都有
echouniqid("bar_",true);
/*输出
bar_4bd67da367b650.43684647
*/
而且,生成出来的ID会比MD5生成的要短,这会让你节省很多空间。
用户名:密码:新用户注册PHP100三不条约投稿网站首页|PHP业界|WEB开发资料|视频教程|PHP开源|相关下载|PHP求职招聘|项目供求|资源共享|PHP100中文论坛Apache|Mysql|PHP|JavaScript|Ajax|XML|DIV&CSS|Linux|数据库技术
资讯类主页>WEB开发资料>PHP>PHP应用>九个PHP很有用的功能九个PHP很有用的功能
时间:2011-07-0800:18来源:coolshell.cn作者:coolshell.cn点击:5403次【字号:大中小】1.函数的任意数目的参数你可能知道PHP允许你定义一个默认参数的函数。但你可能并不知道PHP还允许你定义一个完全任意的参数的函数下面是一个示例向你展示了默认参数的函数://两个默认参数的函数functionfoo($arg1="",$arg2=""){echoarg1:$ar
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()函数
//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);
/*prints
Array
(
[0]=>hello
[1]=>42
[2]=>Array
(
[0]=>1
[1]=>two
)
[3]=>apple
)
*/
这看起来更为紧凑一些了,而且还兼容于Javascript和其它语言。但是对于一些非常复杂的数据结构,可能会造成数据丢失。
8.字符串压缩
当我们说到压缩,我们可能会想到文件压缩,其实,字符串也是可以压缩的。PHP提供了?gzcompress()和gzuncompress()函数:
$string=
"Loremipsumdolorsitamet,consectetur
adipiscingelit.Nuncutelitidmiultricies
adipiscing.Nullafacilisi.Praesentpulvinar,
sapienvelfeugiatvestibulum,nulladuipretiumorci,
nonultricieselitlacusquisante.Loremipsumdolor
sitamet,consecteturadipiscingelit.Aliquam
pretiumullamcorperurnaquisiaculis.Etiamacmassa
sedturpistemporluctus.Curabitursednibheuelit
molliscongue.Praesentipsumdiam,consecteturvitae
ornarea,aliquamanunc.Inidmagnapellentesque
tellusposuereadipiscing.Sednonmimetus,atlacinia
augue.Sedmagnanisi,ornareinmollisin,mollis
sednunc.Etiamatjustoinleoconguemollis.
Nullaminnequeegetmetushendreritscelerisque
eunonenim.Utmalesuadalacuseunullabibendum
ideuismodurnasodales.";
$compressed=gzcompress($string);
echo"Originalsize:".strlen($string)."\n";
/*输出原始大小
Originalsize:800
*/
echo"Compressedsize:".strlen($compressed)."\n";
/*输出压缩后的大小
Compressedsize:418
*/
//解压缩
$original=gzuncompress($compressed);
几乎有50%压缩比率。同时,你还可以使用?gzencode()和gzdecode()函数来压缩,只不用其用了不同的压缩算法。
9.注册停止函数
有一个函数叫做?register_shutdown_function(),可以让你在整个脚本停时前运行代码。让我们看下面的一个示例:
//capturethestarttime
$start_time=microtime(true);
//dosomestuff
//...
//displayhowlongthescripttook
echo"executiontook:".
(microtime(true)-$start_time).
"seconds.";
上面这个示例只不过是用来计算某个函数运行的时间。然后,如果你在函数中间调用?exit()函数,那么你的最后的代码将不会被运行到。并且,如果该脚本在浏览器终止(用户按停止按钮),其也无法被运行。
而当我们使用了register_shutdown_function()后,你的程序就算是在脚本被停止后也会被运行:
$start_time=microtime(true);
register_shutdown_function("my_shutdown");
//dosomestuff
//...
functionmy_shutdown(){
global$start_time;
echo"executiontook:".
(microtime(true)-$start_time).
"seconds.";
}
相关文章
- php+mysql动态网站开发案例课堂_用php写一个网页页面
- [PHP代码]php代码书写规范和要求
- PHP开启MySQL扩展的必要性(php开启mysql扩展)
- 环境快速搭建Linux上的PHP开发环境(Linux装php)
- Linux系统下安装PHP的指南(linux怎么安装php)
- 基于MySQL的PHP留言板系统开发(php留言板mysql)
- 网站利用 PHP 与 MySQL 构建网站.(php和mysql开发)
- PHP向MySQL中安全插入数据(php插入mysql)
- 开发进阶:PHP与MySQL的联动(phpmysql调用)
- PHP与MSSQL:高效开发数据驱动应用程序(php与mssql)
- 使用PHP轻松循环MySQL,让数据处理变得更容易(php循环mysql)
- PHP编程查询MySQL数据库:入门指南(php 查询 mysql)
- PHP解决MSSQL数据库乱码问题(php解决mssql乱码)
- PHP搭配MSSQL营造完美环境联动(php加mssql环境)
- Linux环境下的PHP脚本开发与应用(linux下php脚本)
- Linux下搭建PHP开发环境的一步步操作(linux配置php环境)
- Linux下快速搭建PHP环境(linux 搭建 php)
- 创建数据库php代码用PHP写出自己的BLOG系统
- PHP开发中常用的字符串操作函数
- PHP开发不能违背的安全规则过滤用户输入
- PHP常用开发函数解析之数组篇[未完结]
- PHP输入流php://input介绍
- ubuntu下搭建php开发环境(nginx+(cgi)php5fpm+memcached+xdebug)