优化代码问题,多个If Else语句PHP

时间:2011-06-07 22:05:57

标签: php if-statement

我是一个非常可怕的程序员,但我想要变得更好。我最近编写了一些有用的东西,万岁!但我觉得必须有一个更清洁的方式。对象是:

如果存在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'];
}

4 个答案:

答案 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 operatorcondition ? 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'];