2

我有以下功能可以安全地获取 cookie:

public static function get_cookie($parameter, $default)
{
    return isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
}

当我尝试读取false然后在三元运算符中使用它时,我看到该值被视为字符串(它被转换为true)。

我想将一个类型传递给这个函数并转换值,但不知道如何。

更新

正如 Niko 指出的那样,将“假”转换为布尔值不起作用:http ://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

我想,我必须始终将字符串存储在 cookie 中。(例如,对于我的情况,“是”和“否”而不是“假”和“真”)。

4

2 回答 2

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'- 转换规则与解释器进行隐式转换时相同。

于 2012-08-24T21:48:56.860 回答
0

试试这个

public static function get_cookie($parameter, $default)
{

    if( empty($parameter) ) return $default;       

    return isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
}
于 2012-08-24T21:43:51.173 回答