乐趣区

关于php:PHP-中使用-int-进行类型转换时要比-intval-函数快6倍

PHP 5.6 之前是应用函数 func_num_args()func_get_arg(),和 func_get_args() 实现传递可变参数列表。

PHP 可变参数(…)

PHP 5.6 引进了 … 操作符,官网名称是 splat operator,或者 spread operator(数组延展操作符),也有人称为 Argument unpacking(参数解包)。

具体看 PHP 官网提供的例子就好了:

应用 … 来拜访变量参数

function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {$acc += $n;}
    return $acc;
}

echo sum(1, 2, 3, 4);

输入:10

应用 … 来传递参数

function add($a, $b) {return $a + $b;}

echo add(...[1, 2])."n";

$a = [1, 2];
echo add(...$a);

下面都是输入:3

多个参数

可变参数之前,还能够有别的参数,然而前面就不能有别的参数了,比方上面的例子:

function display($name, ...$args){
    echo '名称:'.$name;
    echo '其余信息:';
    print_r($args);
}

理论利用例子

咱们拿 WordPress 中判断以后用户是否有权限的函数 current_user_can() 来举例,阐明 … 这个操作符如何改善的代码可读性的。

在 PHP 5.6 之前的代码:

function current_user_can($capability) {$current_user = wp_get_current_user();

    if (empty( $current_user) ) {return false;}

    $args = array_slice(func_get_args(), 1 );
    $args = array_merge(array( $capability), $args );

    return call_user_func_array(array( $current_user, 'has_cap'), $args );
}

在没有看完所有函数代码状况下,大多数程序员都会假如这个函数只有 $capability 这一参数,然而该函数是承受可变数量参数的,WordPress 必须应用 func_get_args() 来获取所有参数,而后切开数组分片,而后再合并回去。

尽管性能实现了,然而这样编码十分不爽。当初看看应用了 … 操作符之后的代码:

function current_user_can($capability, ...$args) {$current_user = wp_get_current_user();

    if (empty( $current_user) ) {return false;}

    return $current_user->has_cap($capability, ...$args);
}

首先在函数定义中就分明地看到 ...$args 参数,而后传递数据也变得更加清晰,无需数组的切片和合并解决,也无需应用 call_user_func_array 回调办法,代码十分直观可读。

退出移动版