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

PHP,将默认函数参数设置为函数的结果,php,function,Php,Function,在PHP中,可以为函数提供可选参数: public static function test($var = 'default string') 但是我想让默认值成为另一个函数的返回值。例如,我有一个名为generateToken()的方法,它创建一个所需长度的随机字符串。我试图执行以下代码 public static function sha512($token,$cost = 50000,$salt = self::generateToken(16)) { $salt = '

在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语句调用该方法来实现,但我希望在方法内部实现。我怎样才能做到这一点呢?

说的没错,这是不可能做到的

因此,它必须像下面这样实现

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);
}
他说的没错,这是不可能做到的

因此,它必须像下面这样实现

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);
}

公共静态函数sha512($token,$cost=50000,$salt=null)

更具体地说,
$salt=null

但是我想让默认值成为 另一个功能

为了达到这个目的,这在PHP中是不可能的,PHP不支持一级函数。正如我在上面的评论中提到的,我看到的唯一解决办法是使用回调

据我所知,
$salt
参数旨在使用您可能喜欢的或默认为代码中默认值的任何一种salt

因此,这里有一个可能的解决方案,尽管我相信您已经回答了自己的问题:

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 );
}

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

公共静态函数sha512($token,$cost=50000,$salt=null)

更具体地说,
$salt=null

但是我想让默认值成为 另一个功能

为了达到这个目的,这在PHP中是不可能的,PHP不支持一级函数。正如我在上面的评论中提到的,我看到的唯一解决办法是使用回调

据我所知,
$salt
参数旨在使用您可能喜欢的或默认为代码中默认值的任何一种salt

因此,这里有一个可能的解决方案,尽管我相信您已经回答了自己的问题:

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 );
}

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

请参阅上的答案:默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。我看到的唯一解决方法是使用回调@samyismyhero您想发布一个关于使用回调实现的答案吗?不确定如何执行此操作。请参阅上的答案:默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。我看到的唯一解决方法是使用回调@samyismyhero您想发布一个关于使用回调实现的答案吗?不确定您将如何执行此操作。欢迎使用堆栈溢出!强烈建议您提供一些散文,帮助其他人理解您的解决方案解决问题的原因或方式。欢迎使用Stack Overflow!强烈建议您提供一些散文,帮助其他人理解您的解决方案解决问题的原因或方式。