如何在PHP中将类型传递到函数中


How to pass type into a function in PHP

我有以下功能可以安全地获得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;
}