1. 函数的任意数目的参数
××
定义一个完全任意的参数的函数,其使用到了func_get_args()方法:
1
2
3
4
5
6
7
8
9
10
|
// 是的,形参列表为空
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
*/
|
<?php
function foo(){
$args=func_get_args();
echo func_get_arg(0);
}
foo("h","ll","e","w");
?>
结果为
2. 使用 Glob() 查找文件
用来查找文件。glob()和scandir()一样,用来查找文件
定义和用法
scandir() 函数返回一个数组,其中包含指定路径中的文件和目录。
若成功,则返回一个数组,若失败,则返回 false。如果 directory 不是目录,则返回布尔值 false 并生成一条 E_WARNING 级的错误。
语法
scandir(directory,sort,context)
参数 | 描述 |
---|---|
directory | 必需。规定要扫描的目录。 |
sort | 可选。规定排列顺序。默认是 0 (升序)。如果是 1,则为降序。 |
context | 可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。 |
例子
<?php print_r(scandir("images")); ?>
输出:
Array ( [0] => . [1] => .. [2] => dog.jpg [3] => house.jpg [4] => logo.gif )
1
2
3
4
5
6
7
8
|
// 取得所有的后缀为PHP的文件
$files
=
glob
(
'*.php'
);
print_r(
$files
);
/* 输出:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php)
*/
|
你还可以查找多种后缀名
1
2
3
4
5
6
7
8
9
|
// 取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
)
*/
|
你还可以加上路径:
1
2
3
4
5
|
$files
=
glob
(
'../images/a*.jpg'
);
print_r(
$files
);
/* 输出:
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
|
如果你想得到绝对路径,你可以调用?realpath() 函数:
1
2
3
4
5
6
|
$files
=
glob
(
'../images/a*.jpg'
);
$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
)
*/
|
××第三个例子中array_map的意思为
定义和用法
array_map() 函数返回用户自定义函数作用后的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
array_map(function,array1,array2,array3...)
参数 | 描述 |
---|---|
function | 必需。用户自定义函数的名称,或者是 null。 |
array1 | 必需。规定数组。 |
array2 | 可选。规定数组。 |
array3 | 可选。规定数组。 |
使用多个参数:
<?php function myfunction($v1,$v2) { if ($v1===$v2) { return "same"; } return "different"; } $a1=array("Horse","Dog","Cat"); $a2=array("Cow","Dog","Rat"); print_r(array_map("myfunction",$a1,$a2)); ?>
输出:
Array ( [0] => different [1] => same [2] => different )
××array_map()来运用自定义的函数并返回结果
glob和scandir区别为,glob可以自定义后缀和匹配文件名
而scandir是扫描目录。
3. 内存使用信息
观察你程序的内存使用能够让你更好的优化你的代码。
PHP 是有垃圾回收机制的,而且有一套很复杂的内存管理机制。你可以知道你的脚本所使用的内存情况。要知道当前内存使用情况,你可以使用?memory_get_usage() 函数,如果你想知道使用内存的峰值,你可以调用memory_get_peak_usage() 函数。
1
2
3
4
5
6
7
8
9
10
11
|
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
*/
|