PHP函数小汇总(一)[个人笔记]

1. 高级调试函数 debug_zval_dump

与var_dump的区别, 它新增了一个值refcount,即记录变量被引用的次数.

在手册上有这样一行代码"debug_zval_dump(&$var)" 注意到,在高版本php中是不能使用&的。如果需要引用,要在定义函数的时候加上&符号,而不是在调用的时候如此使用,否则,在5版本会报Fetal Error ,在7版本会报 parse Error。手册更新比较慢,大家注意一下。
$var1 = 'Hello World';

debug_zval_dump($var1);

这段代码在php5 和7测试下,结果都一致

$var1 = 'Hello World';
$var2 = '';

$var2 =& $var1;

debug_zval_dump($var1);

这段代码,在php5和7下的测试结果是不一致的。到笔者写这篇文章为止,手册上仍然是关于5的返回值说明:“Why refcount(1)? Because a copy of $var1 is being made, when the function is called.”但实际的输出,是refcount(2) .

2.高级调试函数 debug_backtrace

它可以回溯跟踪函数的调用信息,可以说是一个调试利器。
function one() 
{ 
    echo "a";
    two(); 
} 
function two() 
{ 
    echo "b";
    three(); 
} 
function three() 
{ 
    echo "c";
    echo "<pre>";
    var_dump(debug_backtrace()); 
}

one();

/*
abc
array(3) {
  [0]=>
  array(4) {
    ["file"]=>
    string(28) "C:\works\wamp\www\test\t.php"
    ["line"]=>
    int(604)
    ["function"]=>
    string(5) "three"
    ["args"]=>
    array(0) {
    }
  }
  [1]=>
  array(4) {
    ["file"]=>
    string(28) "C:\works\wamp\www\test\t.php"
    ["line"]=>
    int(599)
    ["function"]=>
    string(3) "two"
    ["args"]=>
    array(0) {
    }
  }
  [2]=>
  array(4) {
    ["file"]=>
    string(28) "C:\works\wamp\www\test\t.php"
    ["line"]=>
    int(613)
    ["function"]=>
    string(3) "one"
    ["args"]=>
    array(0) {
    }
  }
} 

 */

3.函数 reset() current() end() next() prev() each()

函数说明
reset()函数将内部指针指向数组的第一个元素并输出
current()返回数组中当前元素的值
next()将内部指针指向数组的下一个元素并输出
prev()将内部指针指向数组的上一个元素并输出
end()将内部指针指向数组的最后一个元素并输出
each()返回当前元素的键名和键值,并将内部指针向前移动
$people = array("Bill", "Steve", "Mark", "David"); 
echo current($people) . "<br>"; // 当前元素是 Bill 
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve 
echo current($people) . "<br>"; // 现在当前元素是 Steve 
echo prev($people) . "<br>"; // Steve 的上一个元素是 Bill 
echo end($people) . "<br>"; // 最后一个元素是 David 
echo prev($people) . "<br>"; // David 之前的元素是 Mark 
echo current($people) . "<br>"; // 目前的当前元素是 Mark 
echo reset($people) . "<br>"; // 把内部指针移动到数组的首个元素,即 Bill 
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve 
print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针
echo current($people); //现在当前元素是 Mark 
echo next($people); //现在当前元素是 Mark
var_dump(next($people)); //false

4.strrchr()与strchr()

从名字可以看出,这两个函数必然有相同的功能点。

strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
注释:该函数是二进制安全的
strrchr(string,char)

参数描述
string必需,规定要搜索的字符串
char必需。规定要查找的字符。如果该参数是数字,则搜索匹配此数字的 ASCII 值的字符。

strchr() 函数搜索字符串在另一字符串中的第一次出现。
注释:该函数是 strstr() 函数的别名。
注释:该函数是二进制安全的。
注释:该函数对大小写感敏。如需进行不区分大小写的搜索,请使用 stristr() 函数。

strchr(string,search,before_search);

参数描述
string必需,规定要搜索的字符串
char必需。规定要查找的字符。如果该参数是数字,则搜索匹配此数字的 ASCII 值的字符。
before_search可选。默认值为 “false” 的布尔值。如果设置为 “true”,它将返回 search 参数第一次出现之前的字符串部分。
echo strrchr("I love Shanghai!","Shanghai");
/*输出结果是 Shanghai!*/
//以 "e" 的 ASCII 值搜索 "e" 在字符串中的位置,并返回从该位置到字符串结尾的所有字符:
echo strrchr("Hello world!",101);
/*输出结果为 ello world!*/

5. func_get_args()返回一个包含函数参数列表的数组

array func_get_args ( void )
获取函数参数列表的数组。
该函数可以配合 func_get_arg() 和 func_num_args() 一起使用,从而使得用户自定义函数可以接受自定义个数的参数列表。

返回值返回一个数组,其中每个元素都是目前用户自定义函数的参数列表的相应元素的副本。

Note: 该函数仅仅是返回传递参数的一个副本,并且不包含没有传入的默认参数。

function foo()
{
    $numargs = func_num_args();
    echo "Number of arguments: $numargs<br />\n";
    if ($numargs >= 2) {
        echo "Second argument is: " . func_get_arg(1) . "<br />\n";
    }
    $arg_list = func_get_args();
    for ($i = 0; $i < $numargs; $i++) {
        echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
    }
}

foo(1, 2, 3);

/*
Number of arguments: 3
Second argument is: 2
Argument 0 is: 1
Argument 1 is: 2
Argument 2 is: 3
*/
function foo()
{
     $numargs = func_num_args();
     echo "Number of arguments: $numargs<br />\n";
     if ($numargs >= 2) {
         echo "Second argument is: " . func_get_arg(2) . "<br />\n";
     }
}

foo (1, 2, 3);
/*
Number of arguments: 3
Second argument is: 3
*/

6.array_unshift() array_shift() array_push() array_pop()

参数说明
array_unshift()在数组开头插入一个或多个单元
array_shift()将数组开头的单元移出数组
array_push()将一个或多个单元压入数组的末尾(入栈)
array_pop()将数组最后一个单元弹出(出栈)
  • array_shift()
    mixed array_shift ( array &$array )

将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。【Note: 使用此函数后会重置(reset())array 指针。】

返回值:返回移出的值,如果 array 为 空或不是一个数组则返回 NULL。

  • array_unshift()

    int array_unshift ( array & array,mixed var [, mixed $… ] )

array_unshift() 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

参数:array输入的数组;var开头插入的变量。

返回值:返回 array 数组新的单元数目。

  • array_push()
    int array_push ( array & array,mixed var [, mixed $… ] )

array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加。

Note: 如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。

Note: 如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。

返回:返回处理之后数组的元素个数。

  • array_pop()
    mixed array_pop ( array &$array )

array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL。 此外如果被调用不是一个数则会产生一个 Warning。

Note: 使用此函数后会重置(reset())array 指针。

返回值:返回 array 的最后一个值。如果 array 是空(如果不是一个数组),将会返回 NULL 。

$arr = range(100,120);
echo array_unshift($arr, "11");
var_dump($arr);

$arr = range(1,10);
echo array_shift($arr);
var_dump($arr);

$arr = range(1,10);
echo array_push($arr, "11");
var_dump($arr);

$arr = range(1,10);
echo array_pop($arr);
var_dump($arr);

/*
22
array (size=22)
  0 => string '11' (length=2)
  1 => int 100
  2 => int 101
  3 => int 102
  4 => int 103
  5 => int 104
  6 => int 105
  7 => int 106
  8 => int 107
  9 => int 108
  10 => int 109
  11 => int 110
  12 => int 111
  13 => int 112
  14 => int 113
  15 => int 114
  16 => int 115
  17 => int 116
  18 => int 117
  19 => int 118
  20 => int 119
  21 => int 120
1
array (size=9)
  0 => int 2
  1 => int 3
  2 => int 4
  3 => int 5
  4 => int 6
  5 => int 7
  6 => int 8
  7 => int 9
  8 => int 10
11
array (size=11)
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4
  4 => int 5
  5 => int 6
  6 => int 7
  7 => int 8
  8 => int 9
  9 => int 10
  10 => string '11' (length=2)
10
array (size=9)
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4
  4 => int 5
  5 => int 6
  6 => int 7
  7 => int 8
  8 => int 9
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值