在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语句调用方法来完成,但我想在方法减速中执行此操作。我怎么能这样做?
答案 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 );
}
传入的回调必须在当前范围内才能成功调用。