我是一个非常可怕的程序员,但我想要变得更好。我最近编写了一些有用的东西,万岁!但我觉得必须有一个更清洁的方式。对象是:
如果存在GET变量,请将其用作cookie值。如果变量不存在,请使用默认值。如果Cookie已存在,请使用该值而不是新值。
if (!isset($_COOKIE['id'])) {
if (!isset($_GET[id])) {
$cookid="115";
} else {
$cookid= $_GET["id"];
}
setcookie("id", $cookid , time() + 31536000);
} else {
$cookid= $_COOKIE['id'];
}
答案 0 :(得分:4)
以下是我写的方式:
if(isset($_COOKIE['id'])) {
$cookid = $_COOKIE['id'];
} else {
$cookid = isset($_GET["id"]) ? $_GET["id"] : "115";
setcookie("id", $cookid, time() + 31536000);
}
首先,根据一些惯例,您应该测试积极情况(isset(...)
),而不是负面(!isset()
)。我认为它使代码更具可读性,所以我已将其切换。
其次,我使用ternary operator(condition ? expr1 : expr2
)来消除if / else块,这是可以接受的,因为你只是使用if / else块来决定哪两个值为分配给变量。但是,应谨慎使用三元运算符,因为如果过度使用它会降低代码的可读性。
第三,我喜欢使用大括号,即使是单行if / else块,但至少我认为如果你将else
用于if
,你应该使用大括号}}
最后,只是一个可读性说明:尽量与你的空白保持一致。在第四行,=
周围没有任何空格,但在第六行和第十行之后,你有一个空格,但之前没有空格。为了便于阅读,在操作员的两侧都有空格几乎总是可取的。
哦,$_GET["id"]
是正确的; $_GET[id]
不是。如果您的错误报告级别足够高,它(正确地)会发出警告(您通常应使用error_reporting(E_ALL);
进行开发,以便看到它们。)
答案 1 :(得分:0)
if (isset($_GET['id'])) {
$cookid = (int) $_GET['id'];
setcookie('id', $cookid, time() + 31536000);
} else if (isset($_COOKIE['id'])) {
$cookid = (int) $_COOKIE['id'];
} else {
$cookid = 115;
setcookie('id', $cookid, time() + 31536000);
}
答案 2 :(得分:0)
我会将其封装到一个可以轻松重复使用的函数中:
<?php
/**
* If GET variable exists use it as the cookie value.
* If the Variable doesn't exist use a default value.
* If the Cookie already exists use that value instead of a new one.
*
* @param string $name name of cookie / get variable
* @param string $default default value
* @return string the value.
*/
function cookie_get_value($name, $default) {
if (isset($_COOKIE[$name])) {
$value = $_COOKIE[$name];
} else {
$value = isset($_GET[$name]) ? $_GET[$name] : $default;
setcookie($name, $value , time() + 31536000);
}
return $value;
}
echo cookie_get_value('id', '115');
最后你需要做你需要做的事情。使自己的代码变得更好并不总是那么容易,但是如果你把它放在自己的函数中就更容易修改。
答案 3 :(得分:0)
我相信你可以使用 $ _ REQUEST ,因为它已经有$ _POST,$ _GET和$ _COOKIE
if (!isset($_REQUEST['id']))
{
$cookid = '115';
setcookie("id", $cookid , time() + 31536000);
}
else
$cookid = $_REQUEST['id'];