四个PHP非常实用的功能


Posted in PHP onSeptember 29, 2015

最近写的几个PHP实用功能整理了一下,弄成一个文档,写上说明,方便以后使用!一共有4个PHP实用功能,现在跟大家分享,喜欢的朋友可以把它收藏起来,说不定以后用得上。

1. PHP函数的任意数目的参数
您可能知道PHP允许你定义一个默认参数的函数。但您可能并不知道PHP还允许你定义一个完全任意的参数的函数
下面是一个示例向你展示了默认参数的函数:

// 两个默认参数的函数
function foo($arg1 = '', $arg2 = '') {
echo "arg1: $arg1\n";
echo "arg2: $arg2\n";
}
foo('hello','world');
/* 输出:
arg1: hello
arg2: 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: 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');
// 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";
/* prints
Final: 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: 发送的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)

以上就是分享给大家的PHP实用功能,希望对大家的学习有所帮助。

PHP 相关文章推荐
关于php正则匹配汉字的方法介绍
Apr 25 PHP
php反射应用示例
Feb 25 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
Yii框架安装简明教程
May 15 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 #PHP
PHP+AJAX实现投票功能的方法
Sep 28 #PHP
WIFI万能钥匙密码查询接口实例
Sep 28 #PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 #PHP
培养自己的php编码规范
Sep 28 #PHP
ThinkPHP数据操作方法总结
Sep 28 #PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 #PHP
You might like
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
生成静态页面的PHP类
2006/07/15 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
php按单词截取字符串的方法
2015/04/07 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
jQuery 选择器详解
2015/01/19 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
js生成word中图片处理方法
2018/01/06 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
python 实现视频 图像帧提取
2019/12/10 Python
利用python汇总统计多张Excel
2020/09/22 Python
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
财务管理专业推荐信
2013/11/19 职场文书
求职面试个人自我评价
2014/02/28 职场文书
中秋晚会活动方案
2014/08/31 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
赢在执行观后感
2015/06/16 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
golang正则之命名分组方式
2021/04/25 Golang
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android