我试图想出最好的方式来使用默认变量和覆盖他们,如果一个$_GET通过URL传递。现在,我只有两个,但随着网站的发展,我会增加更多。有没有更好的办法?
我使用define来定义变量和isset来确定变量是否被设置并且不是NULL。
define("THEME", "atom");
define("VERSION", "1.00");
if(isset($_GET["theme"]))
{
$theme = $_GET["theme"];
} else
{
$theme = THEME;
}
if(isset($_GET["version"]))
{
$version = $_GET["version"];
} else
{
$version = VERSION;
}
我决定如下。我将网站设置存储在settings.php:
中$settings = array();
$settings['theme'] = 'default';
然后包含该文件,使用三元操作符,然后定义变量:
include_once('settings.php');
$theme = (isset($_GET["theme"])) ? $_GET["theme"] : $settings['theme'];
define("THEME", $theme);
您可以使用三元操作符来减少键入。
$theme = (isset($_GET["theme"])) ? $_GET["theme"] : THEME;
$version= (isset($_GET["version"])) ? $_GET["version"] : VERSION;
我会用另一种方法。
//$theme = config('default.theme');
//$version = config('default.theme_version');
// or
$theme = 'default';
$version = '1.00';
if(isset($_GET["theme"]) AND is_valid_theme($_GET['theme']))
{
$theme = $_GET["theme"];
}
if(isset($_GET["version"]) AND is_valid_version($_GET['version']))
{
$version = $_GET["version"];
}
define("THEME", $theme);
define("VERSION", $version);
你可以这样做:
$defaults = array(
"theme" => "atom",
"version" => "1.00"
);
$parameters = array_merge($defaults, $_GET);
extract($parameters);
我首先为默认值设置了一个关联数组。然后我用array_merge
将它与$_GET
数组合并。由于我提到$_GET
作为第二个参数,如果存在,它将覆盖这些值。这样,你就得到了一个参数的关联数组。如果您想将它们用作局部变量,您可以使用extract
。
为了清楚起见,我将使用switch
或三元语句:
define("THEME", "atom");
define("VERSION", "1.00");
isset($_GET['theme']) ? $theme = $_GET['theme'] : $theme = THEME;
isset($_GET['version']) ? $theme = $_GET['version'] : $theme = VERSION;
每当我知道我以后可能会像这样扩展一点逻辑时,我通常采用三元方法。