我有以下功能来安全地获取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中。 (例如,'是'没有'而不是' false'以及' true'对于我的情况而言。)
答案 0 :(得分:1)
绝对不需要在函数内部进行转换(特别是因为PHP是松散类型的)。
考虑以下用例:
$booleanValue = ClassName::get_cookie('foo', true, 'bool');
当您在get_cookie()
之外进行投射时,您最终会获得相同数量的代码(但更具可读性!):
$booleanValue = (bool) ClassName::get_cookie('foo', true);
但是,您仍然可以分别为'false'和'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;
}
但请注意,如果指定false
,则不会将字符串“false”转换为布尔值$type = 'bool'
- 转换规则与通过隐式转换完成时的转换规则相同翻译。
答案 1 :(得分:0)
试试这个
public static function get_cookie($parameter, $default)
{
if( empty($parameter) ) return $default;
return isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
}