php中函数支持的功能有,php常用函数大全

  php中函数支持的功能有,php常用函数大全

  即使使用PHP多年,也会偶然发现一些不为人知的函数和功能。其中有些非常有用,但没有被充分利用。不是每个人都会从头到尾一页一页的看手册和功能参考!

  1.具有任意数量参数的函数

  您可能已经知道,PHP允许您用可选参数定义函数。但是也有一些方法完全允许任意数量的函数参数。以下是可选参数的示例:

  //带有两个可选参数的函数

  函数foo($arg1= ,$arg2=) {

  echo arg 1:$ arg1n ;

  echo arg 2:$ arg 2n ;

  foo(hello , world );

  /*印花:

  你好

  arg2:世界

  foo();

  /*印花:

  arg1:

  arg2:

  */

  现在让我们看看如何构建一个可以接受任意数量参数的函数。这一次您需要使用func_get_args()函数:

  //可以,参数列表可以为空

  函数foo() {

  //返回所有传递的参数的数组

  $ args=func _ get _ args();

  foreach ($args as $k=$v) {

  echo arg 。($k 1)。$ VN ;

  foo();

  /*不打印任何内容*/

  foo( hello );

  /*印花

  你好

  foo(hello , world , again );

  /*印花

  你好

  arg2:世界

  arg3:再次

  */

  2.使用Glob()查找文件。

  许多PHP函数都有很长的描述性名称。但是,可能很难说glob()函数能做什么,除非你多次使用过它,并对它很熟悉。可以把它看作是比scandir()函数更强大的版本,可以按照一定的模式搜索文件。

  //获取所有php文件

  $files=glob(*。PHP’);

  print _ r($ files);

  /*输出如下所示:

  排列

  [0]=phptest.php

  [1]=pi.php

  [2]=post_output.php

  [3]=test.php

  */

  您可以获得多个文件,如下所示:

  //获取所有php文件和txt文件

  $files=glob(*。{php,txt} ,GLOB _ BRACE);

  print _ r($ files);

  /*输出如下所示:

  排列

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

  /*输出如下所示:

  排列

  [0]=./images/apple.jpg

  [1]=./images/art.jpg

  */

  如果想获得每个文件的完整路径,可以调用realpath()函数:

  $files=glob(./images/a*。jpg’);

  //将函数应用于每个数组元素

  $files=array_map(realpath ,$ files);

  print _ r($ files);

  /*输出如下所示:

  排列

  [0]=C:wampwwwimagesapple.jpg

  [1]=C:wampwwwimagesart.jpg

  */

  3.内存使用信息

  通过检测脚本的内存使用情况有助于优化代码。PHP提供了垃圾收集器和非常复杂的内存管理器。脚本执行期间使用的内存量有升有降。要获得当前的内存使用情况,我们可以使用memory_get_usage()函数。如果您需要在任何时间点获得最高的内存使用率,可以使用memory_limit()函数。

  echo Initial:。memory_get_usage()。字节数n’;

  /*印花

  初始:361400字节

  //让我们用掉一些内存

  for($ I=0;10万美元;$i ) {

  $ array[]=MD5($ I);

  //让我们移除数组的一半

  for($ I=0;10万美元;$i ) {

  unset($ array[$ I]);

  回声最终:。memory_get_usage()。字节数n’;

  /*印花

  最终:885912字节

  回声“峰值:”。memory_get_peak_usage()。字节数n’;

  /*印花

  峰值:13687072字节

  */

  4.CPU使用信息

  为此,我们将利用getrusage()函数。请记住,该功能不适用于Windows平台。

  print _ r(getrusage());

  /*印花

  排列

  [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 _ n信号]=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:阻止输出操作

  ru_inblock:阻塞输入操作

  ru_msgsnd:发送的消息

  ru_msgrcv:收到的消息

  ru_maxrss:最大驻留集大小

  ru_ixrss:整数共享内存大小

  ru_idrss:整数非共享数据大小

  ru_minflt:页面回收

  ru_majflt:页面错误

  ru _信号:接收的信号

  ru_nvcsw:自愿上下文切换

  ru_nivcsw:不自觉的上下文切换

  ru_nswap:交换

  ru_utime.tv_usec:用户使用的时间(微秒)

  ru_utime.tv_sec:用户使用的时间(秒)

  ru_stime.tv_usec:使用的系统时间(微秒)

  ru_stime.tv_sec:使用的系统时间(秒)

  为了知道脚本消耗了多少CPU资源,我们需要查看两个参数“usertime”和“system time”的值。默认情况下,秒和微秒是分开提供的。你可以把它除以100万微秒,加上参数值seconds,得到一个十进制的总秒数。让我们看一个例子:

  //睡眠3秒钟(非忙碌)

  睡眠(3);

  $ data=getru sage();

  回显“用户时间:”。

  ($data[ru_utime.tv_sec]

  $ data[ ru _ utime . TV _ usec ]/1000000);

  echo“系统时间:”。

  ($data[ru_stime.tv_sec]

  $ data[ ru _ stime . TV _ usec ]/1000000);

  /*印花

  用户时间:0.011552

  系统时间:0

  */

  虽然脚本运行了大约3秒钟,但是CPU利用率非常非常低。因为在休眠的过程中,脚本并没有实际消耗CPU资源。还有许多其他任务可能需要一段时间,但不会占用CPU时间,例如等待磁盘操作。所以正如你所看到的,CPU使用和运行时间的实际长度并不总是相同的。下面是一个例子:

  //循环1000万次(忙)

  for($ I=0;10000000美元;$i ) {

  $ data=getru sage();

  回显“用户时间:”。

  ($data[ru_utime.tv_sec]

  $ data[ ru _ utime . TV _ usec ]/1000000);

  echo“系统时间:”。

  ($data[ru_stime.tv_sec]

  $ data[ ru _ stime . TV _ usec ]/1000000);

  /*印花

  用户时间:1.424592

  系统时间:0.004204

  */

  大概用了1.4秒的CPU时间,但是因为没有系统调用,所以几乎都是用户时间。系统时间是指执行程序的系统调用所花费的CPU开销。下面是一个例子:

  $ start=microtime(true);

  //保持调用microtime大约3秒钟

  while(microtime(true)-$ start 3){

  $ data=getru sage();

  回显“用户时间:”。

  ($data[ru_utime.tv_sec]

  $ data[ ru _ utime . TV _ usec ]/1000000);

  echo“系统时间:”。

  ($data[ru_stime.tv_sec]

  $ data[ ru _ stime . TV _ usec ]/1000000);

  /*印花

  用户时间:1.088171

  系统时间:1.675315

  */

  现在我们有相当多的系统时间。这是因为脚本多次调用microtime()函数,需要向操作系统发出请求来获取所需的时间。您可能还会注意到,运行时间加起来不到3秒。这是因为服务器上可能同时存在其他进程,并且该脚本并不具有100% CPU使用率的整个3秒持续时间。

  5.魔法常数

  PHP提供了对当前行号(__LINE__)、文件路径(__FILE__)、目录路径(__DIR__)、函数名(__FUNCTION__)、类名(__CLASS__)、方法名(__METHOD__)和命名空间(_ _ namespace)的访问,本文我不会一一介绍,但我会告诉你一些用例。当包含其他脚本文件时,使用__FILE__常量(或PHP5.3中新的__DIR__常量):

  //这是相对于加载脚本的路径

  //当从不同目录运行脚本时,这可能会导致问题

  require _ once( config/database . PHP );

  //这总是相对于该文件的路径

  //不管它是从哪里包含进来的

  require_once(目录名(__文件_ _)。/config/database . PHP );

  使用__LINE__使调试更容易。您可以跟踪具体的行号。

  //一些代码

  //.

  my_debug(某个调试消息,_ _ LINE _ _);

  /*印花

  第4行:一些调试消息

  //更多的代码

  //.

  my_debug(另一个调试消息,_ _ LINE _ _);

  /*印花

  第11行:另一条调试消息

  函数my_debug($msg,$line) {

  echo Line $ Line:$ msgn ;

  }

  6.生成唯一标识符

  在某些情况下,可能需要生成一个唯一的字符串。我看到许多人使用md5()函数,即使它并不完全意味着这个目的:

  //生成唯一的字符串

  echo md5(时间()。mt _ rand(11000000);

  实际上有一个名为uniqid()的服务器端编程语言(Professional Hypertext Preprocessor的缩写)函数就是用来做这个的。

  //生成唯一的字符串

  echo uniqid();

  /*印花

  4bd67c947233e

  //生成另一个唯一的字符串

  echo uniqid();

  /*印花

  4bd67c9472340

  */

  你可能会注意到,尽管字符串是唯一的,前几个字符却是类似的,这是因为生成的字符串与服务器时间相关。但实际上也存在友好的一方面,由于每个新生成的身份会按字母顺序排列,这样排序就变得很简单。为了减少重复的概率,你可以传递一个前缀,或第二个参数来增加熵:

  //带前缀

  echo uniqid( foo _ );

  /*印花

  foo_4bd67d6cd8b8f

  //有更多的熵

  echo uniqid( ,true);

  /*印花

  d 6的4bd 67 cd8b 48660.68868688661

  //两者都有

  echo uniqid(bar_ ,true);

  /*印花

  酒吧_ 4bd 67 da 367 b 38667。366666666667

  */

  这个函数将产生比md5()更短的字符串,能节省一些空间。

  7、序列化

  你有没有遇到过需要在数据库或文本文件存储一个复杂变量的情况?你可能没能想出一个格式化字符串并转换成数组或对象的好方法,PHP已经为你准备好此功能。有两种序列化变量的流行方法。下面是一个例子,使用序列化()和取消序列化()函数:

  //复杂数组

  $myvar=array(

  你好,

  数组(1, 2 ),

  苹果公司

  //转换为字符串

  $ string=serialize($ myvar);

  echo $ string

  /*印花

  答:4:{ I:0;学生5分钟你好;I:1;I:42;I:2;a:2:{ I:0;I:1;I:1;生:3:二;} I:3;学生5分钟苹果;}

  //你可以重现原来的变量

  $ new var=unserialize($ string);

  print _ r($ new var);

  /*印花

  排列

  [0]=你好

  [1]=42

  [2]=数组

  [0]=1

  [1]=两个

  苹果公司

  */

  这是原生的服务器端编程语言(专业超文本预处理器的缩写)序列化方法。然而,由于数据近年来大受欢迎,PHP5.2中已经加入了对数据格式的支持。现在你可以使用json_encode()和json_decode()函数:

  //复杂数组

  $myvar=array(

  你好,

  数组(1, 2 ),

  苹果公司

  //转换为字符串

  $ string=JSON _ encode($ myvar);

  echo $ string

  /*印花

  [你好,42,[1,二],苹果]

  //你可以重现原来的变量

  $ new var=JSON _ decode($ string);

  print _ r($ new var);

  /*印花

  排列

  [0]=你好

  [1]=42

  [2]=数组

  [0]=1

  [1]=两个

  苹果公司

  */

  这将更为行之有效,尤其与Java脚本语言等许多其他语言兼容。然而对于复杂的对象,某些信息可能会丢失。

  8、压缩字符串

  在谈到压缩时,我们通常想到文件压缩,如活力压缩等。在服务器端编程语言(专业超文本预处理器的缩写)中字符串压缩也是可能的,但不涉及任何压缩文件。在下面的例子中,我们要利用gz压缩()和gzuncompress()函数:

  $string=

  我想你会喜欢的,知道吗

  肥胖精英。这是我最好的选择

  肥胖Nulla facilisi .普雷森特垫座,

  有一种说法是,

  没有什么比这更好的了。测试用的胡乱文字

  坐吧,肥胖精英理事会。阿利库姆

  你是我们中的一员伊蒂亚姆AC马萨

  sed turpis tempor luctus .Curabitur sed nibh eu elit

  莫莉康格。简历表

  或者是,aliquam a nunc .在id magna pellentesque

  告诉我真相。我不知道,在拉西尼亚

  奥格。大尼西岛,或在莫利斯岛

  sed nunc .艾格在胡斯托在利奥刚果莫利斯。

  在新的一年里

  欧盟非埃尼姆。但是,如果你没有任何东西

  我是euismod urna sodales .

  $ compressed=gz压缩($ string);

  回显"原始大小:"。strlen(string).n’;

  /*印花

  原始尺寸:800

  回声压缩大小:。strlen(已压缩).n’;

  /*印花

  压缩尺寸:418

  //找回它

  $ original=gzun compress($ compressed);

  这种操作的压缩率能达到50% 左右。另外的函数gzencode()和gzdecode()能达到类似结果,通过使用不同的压缩算法。

  9、注册停止功能

  有一个函数叫做register_shutdown_function(),可以让你在某个脚本结束运行之前执行一些指定的代码。假设您需要在脚本执行结束之前捕获一些基本的统计数据,比如运行时间:

  //捕捉开始时间

  $ start _ time=microtime(true);

  //做些事情

  //.

  //显示脚本花费的时间

  “echo”执行时间:。

  (microtime(true) - $start_time)。

  几秒钟。

  这看起来微不足道,你只需要在脚本运行的最后添加相关代码。但是如果您调用了exit()函数,代码将不会运行。此外,如果出现致命错误,或者脚本被用户意外终止,它可能不会再次运行。使用register_shutdown_function()函数时,无论脚本是否停止运行,代码都将继续执行:

  $ start _ time=microtime(true);

  register _ shut down _ function( my _ shut down );

  //做些事情

  //.

  函数my_shutdown() {

  global $ start _ time

  “echo”执行时间:。

  (microtime(true) - $start_time)。

  几秒钟。

  原文:你需要知道的9个有用的PHP函数和特性 nettuts

php中函数支持的功能有,php常用函数大全