2

Cookieを安全に取得するための次の機能があります。

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

読み取っfalseてから三項演算子で使用しようとすると、値が文字列として扱われていることがわかります (これは にキャストされますtrue)。

この関数に型を渡して値をキャストしたいのですが、方法がわかりません。

アップデート

ニコが指摘したように、ブール値への「false」のキャストは機能しません: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

私は、文字列を常にクッキーに保存する必要があると思います。(たとえば、私の場合は「false」と「true」ではなく「yes」と「no」です)。

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 に答える