2011-11-21 72 views
1

我试图拿出来使用默认的变量,如果$ _GET通过URL重写通过他们最佳方式。目前,我只有两个,但我会在开发该网站时添加更多内容。有没有更好的办法?PHP的默认网站变量

我使用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; 
} 

UPDATE 我决定以下。我存储我的站点设置在settings.php配置:

$settings = array(); 
$settings['theme'] = 'default'; 

然后我包括文件,使用三元运算符,然后定义变量:

include_once('settings.php'); 

$theme = (isset($_GET["theme"])) ? $_GET["theme"] : $settings['theme']; 
define("THEME", $theme); 

回答

3

您可以使用三元运算符来减少您的输入。

$theme = (isset($_GET["theme"])) ? $_GET["theme"] : THEME; 
$version= (isset($_GET["version"])) ? $_GET["version"] : VERSION; 
+1

我更愿意用'isset()函数&&空($ _ GET [“主题”])' – pritaeas

+0

**这是不安全的**,你不仅要检查其设置 - !你还必须确保它是* *有效**所以黑客不会插入不好的东西。当你在它的时候,确保它是一个字符串/ int! – Xeoncross

2

我会做它的其他方式。

//$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); 
+0

你能在你使用$变量=配置的扩大(“default.variable”);?我认为这看起来是存储站点特定变量的好方法。这是一个自定义的ini文件吗? THX – w0lf42

+0

@ w0lf42,大多数框架都有某种配置加载。 config()可以加载JSON/XML/INI/YAML/PHP数组文件来查找默认值。 – Xeoncross

1

你总是可以做这样的事情:

$defaults = array(
    "theme" => "atom", 
    "version" => "1.00" 
); 

$parameters = array_merge($defaults, $_GET); 
extract($parameters); 

我首先设置为默认值的关联数组。然后我使用array_merge将它与$_GET数组合并。由于我提到$_GET作为第二个参数,它会覆盖这些值,如果它们存在。这样,你可以得到一个关联的参数数组。如果你想使用它们作为局部变量,你可以使用extract

0

我会在这里使用一个switch或三元语句清晰:

define("THEME", "atom"); 
define("VERSION", "1.00"); 

isset($_GET['theme']) ? $theme = $_GET['theme'] : $theme = THEME; 
isset($_GET['version']) ? $theme = $_GET['version'] : $theme = VERSION; 

每当我知道我可以在以后扩展有点逻辑是这样我通常采取三元的做法。保持一切可读性。