四个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 空格,换行,跳格使用说明
Dec 18 PHP
PHP 时间转换Unix时间戳代码
Jan 22 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
基于php伪静态的实现方法解析
Jul 31 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
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
纯js简单日历实现代码
2013/10/05 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
Python迭代用法实例教程
2014/09/08 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
python如何实现代码检查
2019/06/28 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
关于Java finally的面试题
2016/04/27 面试题
自我鉴定思想方面
2013/10/07 职场文书
工程师求职简历的自我评价分享
2013/10/10 职场文书
安全温馨提示语大全
2015/07/14 职场文书
团结友爱主题班会
2015/08/13 职场文书
小学班级标语口号大全
2015/12/26 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
使用Ajax实现进度条的绘制
2022/04/07 Javascript