PHP,将默认函数参数设置为函数的结果
在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 = '
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!强烈建议您提供一些散文,帮助其他人理解您的解决方案解决问题的原因或方式。