四个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 相关文章推荐
PHP4实际应用经验篇(5)
Oct 09 PHP
php中的MVC模式运用技巧
May 03 PHP
整理的9个实用的PHP库简介和下载
Nov 09 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
destoon之一键登录设置
Jun 21 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
PHP函数rtrim()使用中的怪异现象分析
Feb 24 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
PHP 裁剪图片
Mar 09 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获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
Python实现多线程抓取妹子图
2015/08/08 Python
Zabbix实现微信报警功能
2016/10/09 Python
python 基础教程之Map使用方法
2017/01/17 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
Python单元测试简单示例
2018/07/03 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
python正则-re的用法详解
2019/07/28 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
护士个人简历自荐信
2013/10/18 职场文书
奥巴马演讲稿
2014/01/08 职场文书
烹饪自我鉴定
2014/03/01 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
珍爱生命主题班会
2015/08/13 职场文书
正则表达式基础与常用验证表达式
2022/06/16 Javascript
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python