优化代码问题,多个如果其他语句PHP
我是一个非常糟糕的编码器,但我正努力变得更好。我最近编写了一些有用的东西,万岁!但我觉得必须有一个更清洁的方式。对象是:优化代码问题,多个如果其他语句PHP
如果存在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'];
}
以下是我会写它:
所有的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块,我也倾向于使用花括号,但至少我认为如果将它们用于if
,则应该使用大括号作为else
。
最后,只是一个可读性说明:尽量与你的空白保持一致。在第四行中,=
周围没有任何空格,但在第6行和第10行中后面有空格,但之前没有空格。为了便于阅读,在操作员的两边都留有空白几乎总是可取的。
哦,$_GET["id"]
是正确的; $_GET[id]
不是。如果您的错误报告级别足够高,它(正确)会发出警告(并且您通常应该使用error_reporting(E_ALL);
进行开发,以便看到它们)。
+1,但修复了您从问题中复制出来的小错字;) – KingCrunch 2011-06-07 22:12:11
很高兴我问过这个问题,我之前从未听说过三元运算符,所以我学到了新的东西。 – 2011-06-07 22:14:53
约翰:我已经给我的答案增加了几个指针。看一看。希望它有帮助。 – 2011-06-07 22:18:10
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);
}
我会封装成可以很容易地重新使用的功能:
<?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');
最后,你需要做的,如果的你需要做的。要使自己的代码更好,并不总是那么容易,但是如果将它放入自己的函数中,则更容易修改。
一个名为'cookie_get_value'的函数调用'setcookie()'?通过。尽管如此,文档评论块的道具。 – 2011-06-07 22:26:58
当然,函数的名字只是一个猜测,价值非常有限。只有原始的OP应该命名该功能,因为它适合具体的需求,他是唯一能够正确命名它的人。这就是为什么我没有详细说明这一点。 “SetCookieIfGetOtherwiseReturnCookie()” – hakre 2011-06-07 22:38:06
BTW文档注释是OP的文本。它不会传递任何要求,因为该函数除了文档注释描述之外还有别的功能。然而,OP还需要进一步开展这项工作。这只是一个例子。 – hakre 2011-06-07 22:39:51
我相信你可以使用$ _REQUEST,因为它已经有$ _ POST,$ _ GET和$ _COOKIE它
if (!isset($_REQUEST['id']))
{
$cookid = '115';
setcookie("id", $cookid , time() + 31536000);
}
else
$cookid = $_REQUEST['id'];
您的代码看起来像它应该做你想要它做什么?它不像预期的那样行事?如果你正在寻找一种更清洁的方法,我认为你已经有了一个非常简单的方法。只要有疑问,请使用“奥卡姆剃刀”,并使用简单的解决方案解决复杂的问题。祝你好运! – hypervisor666 2011-06-07 22:12:04