四个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 相关文章推荐
模仿OSO的论坛(五)
Oct 09 PHP
linux php mysql数据库备份实现代码
Mar 10 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
php树型类实例
Dec 05 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
Yii获取当前url和域名的方法
Jun 08 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 23 PHP
YII2框架使用控制台命令的方法分析
Mar 18 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
微信支付开发交易通知实例
2016/07/12 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
vue实现文字加密功能
2019/09/27 Javascript
python实现的简单猜数字游戏
2015/04/04 Python
python下载图片实现方法(超简单)
2017/07/21 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
python分布式计算dispy的使用详解
2019/12/22 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
详解Python 循环嵌套
2020/07/09 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
介绍一下Ruby的多线程处理
2013/02/01 面试题
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript