下面是九个PHP中很有用的功能,不知道你用过了吗? 1.
函数的任意数目的参数你可能知道PHP允许你定义一个默认参数的函数。但你可能并不知道PHP还允许你定义一个完全任意的参数的函数
下面是一个示例向你展示了默认参数的函数:
- // 两个默认参数的函数
- function foo($arg1 = '', $arg2 = '') {
- ho "arg1: $arg1n";
- ho "arg2: $arg2n";
- }
- foo('hello','world');
- /* 输出:
- arg1: hello
- arg2: world
- */
- foo();
- /* 输出:
- arg1:
- arg2:
- */
2. 使用 Glob() 查找文件很多PHP的函数都有一个比较长的自解释的函数名,但是,当你看到?glob()
的时候,你可能并不知道这个函数是用来干什么的,除非你对它已经很熟悉了。你可以认为这个函数就好?scandir() 一样,其可以用来查找文件。
- // 取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
- )
- */
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下不可用。
查看代码打印代码帮助
- 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)
5. 系统常量PHP 提供非常有用的系统常量 可以让你得到当前的行号 (__LINE__),文件
(__FILE__),目录(__DIR__),函数名 (__FUNCTION__),类名(__CLASS__),方法名(__METHOD__)
和名字空间(__NAMESPACE__),很像C语言。我们可以以为这些东西主要是用于调试,当也不一定,比如我们可以在include其它文件的时候使用?__FILE__ (当然,你也可以在
PHP 5.3以后使用 __DIR__ )6.生成唯一的ID有很多人使用
md5() 来生成一个唯一的ID,如下所示:其实,PHP中有一个叫?uniqid()
的函数是专门用来干这个的:
- // generate unique string
- echo uniqid();
- /* 输出
- 4bd67c947233e
- */
- // generate another unique string
- echo uniqid();
- /* 输出
- 4bd67c9472340
- */
7.
序列化你是否会把一个比较复杂的数据结构存到数据库或是文件中?你并不需要自己去写自己的算法。PHP早已为你做好了,其提供了两个函数:?serialize()
和 unserialize():
8.
字符串压缩
- 当我们说到压缩,我们可能会想到文件压缩,其实,字符串也是可以压缩的。PHP提供了?gzcompress() 和 gzuncompress()
函数:
- $string =
- "Lorem ipsum dolor sit amet, consectetur
- adipiscing elit. Nunc ut elit id mi ultricies
- adipiscing. Nulla facilisi. Praesent pulvinar,
- sapien vel feugiat vestibulum, nulla dui pretium orci,
- non ultricies elit lacus quis ante. Lorem ipsum dolor
- sit amet, consectetur adipiscing elit. Aliquam
- pretium ullamcorper urna quis iaculis. Etiam ac massa
- sed turpis tempor luctus. Curabitur sed nibh eu elit
- mollis congue. Praesent ipsum diam, consectetur vitae
- ornare a, aliquam a nunc. In id magna pellentesque
- tellus posuere adipiscing. Sed non mi metus, at lacinia
- augue. Sed magna nisi, ornare in mollis in, mollis
- sed nunc. Etiam at justo in leo congue mollis.
- Nullam in neque eget metus hendrerit scelerisque
- eu non enim. Ut malesuada lacus eu nulla bibendum
- id euismod urna sodales. ";
- $compressed = gzcompress($string);
- echo "Original size: ". strlen($string)."n";
- /* 输出原始大小
- Original size: 800
- */
- echo "Compressed size: ". strlen($compressed)."n";
- /* 输出压缩后的大小
- Compressed size: 418
- */
- // 解压缩
- $original = gzuncompress($compressed);
几乎有50% 压缩比率。同时,你还可以使用?gzencode() 和 gzdecode()
函数来压缩,只不用其用了不同的压缩算法。
9. 注册停止函数有一个函数叫做?register_shutdown_function(),可以让你在整个脚本停时前运行代码。让我们看下面的一个示例:
- // capture the start time
- $start_time = microtime(true);
- // do some stuff
- // ...
- // display how long the script took
- echo "execution took: ". (microtime(true) -
$start_time).
" seconds.";上面这个示例只不过是用来计算某个函数运行的时间。然后,如果你在函数中间调用?exit()
函数,那么你的最后的代码将不会被运行到。并且,如果该脚本在浏览器终止(用户按停止按钮),其也无法被运行。而当我们使用了
register_shutdown_function()后,你的程序就算是在脚本被停止后也会被运行:
原文地址:
阅读(693) | 评论(0) | 转发(0) |