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

时间:2012-08-24 21:37:16

标签: php casting type-conversion

我有以下功能来安全地获取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'对于我的情况而言。)

2 个答案:

答案 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;
}