《九个PHP很有用的功能》我的学习(1)

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

1.函数func_get_args返回一个包含函数参数列表的数组

array func_get_args( void )

此函数返回一数组,数组的各个元素相当于是目前使用者定义函数的各个参数。如果是从函数定义的外面来呼叫此函数,则func_get_args()将会产生警告。

××也就是说,在函数里面用这个函数才行!而不是单独拿出来。返回参数,为数组形式

2.函数func_get_arg从函数参数列表返回指定参数

mixed func_get_arg( int arg_num )

传回定义函数的参数列表的第arg_num个参数,其参数从0开始。且函数定义的外面来呼叫此函数会产生警告;并且当arg_num大于函数实际传递的参数数目时亦会产生警告并返回FALSE。

**如下示范

<?php
  function foo(){
    $args=func_get_args();
	echo func_get_arg(0);
	}
	foo("h","ll","e","w");
?>
结果为

h

3.函数func_num_args返回传递到函数的参数数目

int func_num_args( void )

此函数返回传递到目前定义函数的参数数目。如果是从函数定义的外面来呼叫此函数,则func_num_args()将会产生警告。


func_num_args()可以用来结合func_get_arg()和func_get_args(),来允许使用者定义的函数接受可变长度参数列表。在我们构建PHP类的时候,灵活使用这三个函数,可以起到非常理想的效果,例如外面在创建PHP和MYSQL链接的类时,可以书写如下代码:

<?php
class mydb{

private $user;
private $pass;
private $host;
private $db;

public function __construct(){
$num_args=func_num_args();
if($num_args>0){
$args=func_get_args();
$this->host=$args[0];
$this->user=$args[1];
$this->pass=$args[2];
this->connect();
}××意思是说,如果实例这个类的时候,传参为一个数组,就可以直接赋给相应属性
}

……..
?>

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 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值