我有以下功能可以安全地获得cookie:
public static function get_cookie($parameter, $default)
{
return isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
}
当我尝试读取false
,然后在三元运算符中使用它时,我看到该值被视为字符串(它被强制转换为true
)。
我想将一个类型传递给这个函数并强制转换值,但不知道如何传递。
更新
正如Niko所指出的,将"false"转换为布尔值是行不通的:http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
我想,我必须总是把字符串存储在cookie中。(例如,在我的案例中,用"是"answers"否"代替"假"answers"真")。
绝对没有必要在函数内部进行强制转换(尤其是因为PHP是松散类型的)。
考虑以下用例:
$booleanValue = ClassName::get_cookie('foo', true, 'bool');
当您在get_cookie()
:之外执行强制转换时,您最终会得到相同数量的代码(但可读性更强!)
$booleanValue = (bool) ClassName::get_cookie('foo', true);
然而,您仍然可以分别为"false"answers"true"字符串实现一个简单的开关:
public static function get_cookie($parameter, $default, $isPseudoBool = false) {
$value = isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
if ($isPseudoBool) {
$value = ($value === true || strcasecmp($value, 'true') === 0);
}
return $value;
}
如果您仍然喜欢将类型转换移到函数中,settype()
就是您需要的:
public static function get_cookie($parameter, $default, $type) {
$value = isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
settype($value, $type);
return $value;
}
但请注意,如果指定$type = 'bool'
,这不会将字符串"false"转换为布尔值false
——转换规则与解释器进行隐式转换时相同。
试试这个
public static function get_cookie($parameter, $default)
{
if( empty($parameter) ) return $default;
return isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
}