PHP,将默认函数参数设置为函数结果

时间:2015-01-31 17:28:45

标签: php function

在PHP中,您可以为函数提供可选参数:

public static function test($var = 'default string')

但是我希望默认值是来自另一个函数的返回值。例如,我有一个名为generateToken()的方法,它创建一个所需长度的随机字符串。我试图执行以下代码......

public static function sha512($token,$cost = 50000,$salt = self::generateToken(16)) {
        $salt = '$6$rounds=' . $cost . '$' . $salt . ' $';
        return crypt($token, $salt);
}

然而,这会引发以下错误...

Parse error: syntax error, unexpected '(', expecting ')' in /var/www/www.domain.com/path/to/cryptography.php on line 11

第11行是方法减速线。我知道这可以通过将默认值设置为类似'NONE'然后使用if语句调用方法来完成,但我想在方法减速中执行此操作。我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

docs中说得对,这是无法做到的。

所以相反它必须像下面这样实现......

public static function sha512($token,$cost = 50000,$salt = null) {
    $salt = ($salt == null) ? (self::generateToken(16)) : ($salt);
    $salt = '$6$rounds=' . $cost . '$' . $salt . ' $';
    return crypt($token, $salt);
}

答案 1 :(得分:0)

public static function sha512($token,$cost = 50000,$salt) {
    $salt = self::generateToken(16);
    $salt = '$6$rounds=' . $cost . '$' . $salt . ' $';
    return crypt($token, $salt);
}

答案 2 :(得分:0)

public static function sha512( $token, $cost = 50000, $salt = null )

更具体地说是$salt = null

  

但我希望默认值为返回值   另一个功能。

保持这个意图这在PHP中是不可能的,PHP不支持一流的功能。我在上面的评论中提到的唯一解决方法是使用回调。

根据我的理解,$salt param旨在使用您可能喜欢的盐或默认为代码中的默认盐。

所以这是一个可能的解决方案,虽然我相信你已经回答了自己的问题:

public static function sha512( $token, $salt = null, $cost = 50000 ) {

    // if a custom salt is provided
    if( isset( $salt ) ) {

        // calls the callback function passed in as a param
         $salt = $salt( 16 );

        // assemble the result to your specs
        $salt = '$6$rounds=' . $cost . '$' . $salt . ' $';

        // return final result
        return crypt( $token, $salt );
    }

    // default if no custom salt is provided
    $salt = self::generateToken( 16 );
    $salt = '$6$rounds=' . $cost . '$' . $salt . ' $';

    // return final result
    return crypt( $token, $salt );
}

传入的回调必须在当前范围内才能成功调用。