Php 优化代码问题,多个If-Else语句
我是一个相当糟糕的程序员,但我正在努力变得更好。我最近编写了一些有用的代码,万岁!但我觉得一定有更干净的方法。目标是: 如果GET变量存在,则将其用作cookie值。如果变量不存在,请使用默认值。如果Cookie已经存在,请使用该值而不是新值Php 优化代码问题,多个If-Else语句,php,if-statement,Php,If Statement,我是一个相当糟糕的程序员,但我正在努力变得更好。我最近编写了一些有用的代码,万岁!但我觉得一定有更干净的方法。目标是: 如果GET变量存在,则将其用作cookie值。如果变量不存在,请使用默认值。如果Cookie已经存在,请使用该值而不是新值 if (!isset($_COOKIE['id'])) { if (!isset($_GET[id])) { $cookid="115"; } else { $cookid= $_GET["id"]; } setcooki
if (!isset($_COOKIE['id'])) {
if (!isset($_GET[id])) {
$cookid="115";
} else {
$cookid= $_GET["id"];
}
setcookie("id", $cookid , time() + 31536000);
} else {
$cookid= $_COOKIE['id'];
}
我是这样写的:
if(isset($_COOKIE['id'])) {
$cookid = $_COOKIE['id'];
} else {
$cookid = isset($_GET["id"]) ? $_GET["id"] : "115";
setcookie("id", $cookid, time() + 31536000);
}
首先,根据一些惯例,您应该测试阳性情况(isset(…)
),而不是阴性情况(!isset()
)。我认为这有助于提高代码的可读性,所以我将其转换
其次,我使用了(条件?expr1:expr2
)来消除if/else块,这是可以接受的,因为您只是使用if/else块来决定将两个值中的哪一个分配给变量。不过,使用三元运算符时应谨慎,因为如果过度使用,可能会降低代码的可读性
第三,我倾向于对一行if/else块使用大括号,但至少我认为,如果对if
使用大括号,则应对else
使用大括号
最后,请注意可读性:尽量与空白保持一致。第四行的=
周围没有空格,但第六行和第十行后面有空格,但前面没有。为了可读性,在操作符的两边都有空格几乎总是更可取的
哦,
$\u GET[“id”]
是正确的<代码>$\u GET[id]不可用。如果您的错误报告级别足够高(并且您通常应该使用错误报告(E_ALL);
进行开发,这样您就可以看到它们),它(正确地)会发出警告。我会将其封装到一个易于重用的函数中:
<?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');
我相信您可以使用$\u REQUEST,因为它已经包含了$\u POST、$\u GET和$\u COOKIE
if (!isset($_REQUEST['id']))
{
$cookid = '115';
setcookie("id", $cookid , time() + 31536000);
}
else
$cookid = $_REQUEST['id'];
您的代码看起来应该执行您希望它执行的操作?它的行为是否不符合预期?如果你在寻找一个更干净的方法,我想你已经有了一个非常简单的方法。当你有疑问时,使用“奥卡姆剃刀”,用简单的方法解决复杂的问题。祝你好运很高兴我问了这个问题,我以前从来没有听说过三元运算符,所以我学到了一些新的东西。约翰:我在我的答案上又增加了一些提示。看一看。希望对你有帮助,再看一遍。感谢所有的帮助,我真的很感谢指针。从5.3开始,PHP支持?:Elvis操作符。只要id不会计算为false,就可以执行$cookid=$\u GET[“id”]?:“115”;谢谢,mwhite,我不知道PHP5.3添加了这个。一个名为cookie\u get\u value
的函数调用setcookie()
?通过。当然,函数名只是一个猜测,其价值非常有限。只有最初的OP才能根据具体需要命名函数,他是唯一能够正确命名函数的人。这就是为什么我没有详细说明的原因。“SetCookieIfGetOtherwiseReturnCookie()”顺便说一句,文档注释是OP中的文本。它无论如何都不会传递要求,因为该函数除了文档注释所描述的内容之外还执行其他操作。然而,这又取决于OP在这方面的进一步工作。这只是一个例子。
if (!isset($_REQUEST['id']))
{
$cookid = '115';
setcookie("id", $cookid , time() + 31536000);
}
else
$cookid = $_REQUEST['id'];