Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中将类型传递给函数_Php_Casting_Type Conversion - Fatal编程技术网

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

如何在PHP中将类型传递给函数,php,casting,type-conversion,Php,Casting,Type Conversion,我有以下功能可以安全地获取cookie: public static function get_cookie($parameter, $default) { return isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default; } 当我尝试读取false然后在三元运算符中使用它时,我看到值被视为字符串(转换为true) 我想向这个函数传递一个类型并转换值,但不知道如何转换 更新 正如Niko指出的,将“false”转

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

public static function get_cookie($parameter, $default)
{
    return isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
}
当我尝试读取
false
然后在三元运算符中使用它时,我看到值被视为字符串(转换为
true

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

更新

正如Niko指出的,将“false”转换为布尔值不起作用:

我想,我必须总是在饼干中储存字符串。(例如,在我的案例中,用“是”和“否”代替“假”和“真”。

试试这个

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

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

    return isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
}

绝对不需要在函数内部执行强制转换(特别是因为PHP是松散类型的)

考虑以下用例:

$booleanValue = ClassName::get_cookie('foo', true, 'bool');
当您在
get\u cookie()
之外执行强制转换时,最终得到的代码量相同(但可读性要高得多!):


但是,您仍然可以分别为“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'
-转换规则与解释器执行隐式转换时的规则相同。

是否确实要首先将其作为字符串传递?请先使用
gettype
@John Conde Eh测试参数的类型。。。通过什么?很抱歉这么笨。你能告诉我们你是如何调用函数和传递参数的吗?它应该是像“小甜饼”一样的东西(false,.@peacemaker我已经用gettype测试了结果,它是字符串'false'和$cookie?'a':'b'返回a。很好。谢谢。我的意思是在函数外部强制转换。硬编码是类型1,是类型2…似乎不是个好主意。坦率地说,我还是更喜欢将类型作为非可选参数来传递,以消除这种错误gs.如果我忘记强制转换该怎么办?@noober我已经添加了一个版本,该版本接受所需返回值类型的参数。但是,我还是不建议这样做。哦,settype。我必须自己找到它。再次感谢你。我想,显式类型传递更安全。特别是对我来说,因为我根本不喜欢PHP变体之类的类型(只是在今天之前从未遇到过问题。)“这不会将字符串“false”转换为布尔值false”该死!你是对的!
public static function get_cookie($parameter, $default, $type) {
    $value = isset($_COOKIE[$parameter]) ? $_COOKIE[$parameter] : $default;
    settype($value, $type);
    return $value;
}