1.任意数目的参数

 // 两个默认参数的函数
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的文件
$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.内存使用查看

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
*/

5.CPU使用

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) 要看到你的脚本消耗了多少CPU,我们需要看看“用户态的时间”和“系统内核时间”的值。秒和微秒部分是分别提供的,您可以把微秒值除以100万,并把它添加到秒的值后,可以得到有小数部分的秒数。 // sleep for 3 seconds (non-busy)
sleep(3); $data = getrusage();
echo "User time: ".
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000); /* 输出
User time: 0.011552
System time: 0
*/ sleep是不占用系统时间的,我们可以来看下面的一个例子: // loop 10 million times (busy)
for($i=0;$i<10000000;$i++) { } $data = getrusage();
echo "User time: ".
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000); /* 输出
User time: 1.424592
System time: 0.004204
*/ 这花了大约14秒的CPU时间,几乎所有的都是用户的时间,因为没有系统调用。 系统时间是CPU花费在系统调用上的上执行内核指令的时间。下面是一个例子: $start = microtime(true);
// keep calling microtime for about 3 seconds
while(microtime(true) - $start < 3) { } $data = getrusage();
echo "User time: ".
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000); /* prints
User time: 1.088171
System time: 1.675315
*/ 我们可以看到上面这个例子更耗CPU。

5.系统常量

__LINE__ 行号
__FIEL__文件
__DIR__目录
__FUNCTION__函数名
__CLASS__类名
__METHOD__方法名
__NAMESPACE__命名空间

6.唯一的ID

有很多人使用md5(time() . mt_rand(1,1000000)); 来生成唯一的ID
其实uniqid()就可以达到目的,而且前几位还是一样的,因为生成器依赖于系统的事件,方便为ID排序
甚至可以添加前缀
// 前缀
echo uniqid('foo_');
/* 输出
foo_4bd67d6cd8b8f
*/

 

  // 有更多的熵

echo uniqid('',true);

/* 输出

4bd67d6cd8b926.12135106

*/

7.序列化

序列化serialize()和反序列化 unserialize()
其实json_encode()和json_decode()可以实现类似的功能

8.字符串压缩

gzcompress() 和 gzuncompress()

9.注册停止函数

当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会被调用
<?php
$clean = false;
function shutdown_func(){
  global $clean;
  if (!$clean){
    die("not a clean shutdown");
  }
  return false;
}
register_shutdown_function("shutdown_func");
$a = 1;
$a = new FooClass(); // 将因为致命错误而失败,这时会触发注册的停止函数,因为是存储在内存中的,所以没有相对路径可言
$clean = true;
?>

php九个很有用的功能的更多相关文章

  1. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

  2. 九个PHP很有用的功能

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

  3. 九个很有用的php功能

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

  4. [转]redis-cli的一些有趣也很有用的功能

    本文转至:http://www.tuicool.com/articles/Yvqm2ev http://mdba.cn/category/redis/ redis-cli我们最常用的两个参数就是-h. ...

  5. redis-cli的一些有趣也很有用的功能

    redis-cli我们最常用的两个参数就是-h.-p.-a选项,分配用来指定连接的redis-server的host和port. 通过redis-cli –help发现,redis-cli还提供了其他 ...

  6. XMind十大最有用的功能

    XMind十大最有用的功能 XMind是一款顶级商业品质的思维导图软件和头脑风暴软件,在企业和教育领域都有很广泛的应用,XMind功能全面,易上手,在此小编给大家整理出了XMind十大最有用的功能以供 ...

  7. 在网站开发中很有用的8个 jQuery 效果【附源码】

    jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuer ...

  8. 对于 Web 开发很有用的 jQuery 效果制作教程

    如果你的项目中需要响应式滑块,炫丽的图片呈现,对话框提示,轻巧动画等效果,jQuery 是完美的解决方案.凭借这个快速,易用的 JavaScript 库,可以轻松处理语言之间的交互,它给人最快速的 W ...

  9. 今日推荐:10款在 Web 开发中很有用的占位图片服务

    设计网站时,将要使用的图像在一开始通常还不存在,这个时候布局是最重要的.然而,图像的尺寸通常是预先设置,实用一些占位图像可以帮助我们更好地预览和分析布局. 如今,有免费的占位图片自动生成工具可以使用, ...

随机推荐

  1. 记一次百万行WPF项目代码的重构记录

    此前带领小组成员主导过一个百万行代码上位机项目的重构工作,分析项目中存在的问题做了些针对性的优化,整个重构工作持续了一年半之久. 主要针对以下问题: 1.产品型号太多导致代码工程的分支太多,维护时会产 ...

  2. 解决 docker 日志占满磁盘导致 docker 服务停止的问题

    #进入 root 模式 sudo -i # 查看目录大小 sudo du -h --max-depth=1 # 应该会定位到这个目录 `/var/libs/docker/containers` # 最 ...

  3. 在Windows2003 server 64位系统上使用ArcEngine开发的WCF服务

    之前大篇文章提到,ESRI说AE10.0以后已经不支持WebService的发布,经过一段时间的测试,发现目前10.2.2版本开始的WCF服务都可以正常发布,且运行正常. 先说一下之前遇到的问题,本机 ...

  4. 127_Power Pivot&Power BI DAX计算订单商品在库时间(延伸订单仓储费用)

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前面已经写过一个先进先出的库龄案例,在业务发生又有这样一个需求:先进先出前提,需要按照订单计算每个商品在库时间, ...

  5. 从标准输入流中读取并执行shell指定函数

    巧妙的ohmytmux配置 看oh my tmux的配置,发现他们很巧妙的将配置和shell函数放到一个文件里 比如切换鼠标模式的相关配置和shell函数, # : << EOF # .. ...

  6. ACM 刷题记录

    HDU Multi-University Training Contest 题目来源 题目 知识点 时间复杂度 完成情况 2019 Contest8 A Acesrc and Cube Hyperne ...

  7. 毕设(1)——机械臂DH建模

    目录 毕设(1)--机械臂DH建模 改进DH参数表 Matlab代码验证 毕设中用到了很多代码,其中一部分我通过看书和看论文学习并实现的代码,会通过Gitee仓库分享出来,这些代码仅用于学习使用,祝各 ...

  8. 为什么我在css里使用功能类优先

    前言 我想在我们开始的学CSS语法的时候,都是从以下的流程开始的: 1.写一个CSS类选择器: .my-class { } 2.往选择器里填充CSS语法: .my-class { display fl ...

  9. 深度学习与CV教程(14) | 图像分割 (FCN,SegNet,U-Net,PSPNet,DeepLab,RefineNet)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  10. camunda如何调用HTTP REST(Service Task)服务节点

    ​ Camunda中的Service Task(服务任务)用于调用服务.在Camunda中,可以通过调用本地Java代码.外部工作项.web服务形式实现的逻辑来完成的. 本文重点描述如何使用web服务 ...