我正在尝试优化以下PHP If / Else语句。我可以重写代码以使用case
和switch
,还是应该保留原样,或者是什么?
代码:
if(empty($_GET['id'])){
include('pages/home.php');
}elseif ($_GET['id'] === '13') {
include('pages/servicestatus.php');
}elseif(!empty($_GET['id'])){
$rawdata = fetch_article($db->real_escape_string($_GET['id']));
if(!$rawdata){
$title = "";
$meta['keywords'] = "";
$meta['description'] = "";
}else{
$title = stripslashes($rawdata['title']);
$meta['keywords'] = stripslashes($rawdata['htmlkeywords']);
$meta['description'] = stripslashes($rawdata['htmldesc']);
$subs = stripslashes($rawdata['subs']);
$pagecontent = "<article>" . stripslashes($rawdata['content']) . "</article>";
}
include("includes/header.php");
echo $pagecontent;
if(!$rawdata){
error_404();
}
}
由于
答案 0 :(得分:2)
您可能希望将代码分解为MVC表单;这将使维护代码变得更容易。至少将最后一个子句放入另一个文件中,可能称为default.php
和include
。此外,您可以创建一个id =&gt;的数组。文件键/值集,查找id,并包含文件。
if (isset($_GET['id'])) {
$pages = array(
0 => 'home.php',
13 => 'servicestatus.php'
);
if (isset($pages[$_GET['id']])) {
include('pages/' . $pages[$_GET['id']]);
} else {
include('pages/default.php');
}
}
答案 1 :(得分:2)
嗯,我认为没有必要改用开关 但你可以改变
} elseif (!empty($_GET['id'])) {
到
}else{
答案 2 :(得分:2)
switch
有多个离散值,则 $_GET['id']
是合适的。
为了便于阅读,我可以提出一个建议
} elseif (!empty($_GET['id'])) {
只需要
} else {
答案 3 :(得分:2)
我讨厌转换语句,但其个人偏好是诚实的。至于进一步的优化,我建议看看某种形式的汇编语言。它将为您提供有关如何使条件语句更有效的一般概念。也就是说,它会给你一个不同的外观。
if(!empty($_GET['id']))
{
if($_GET['id'] == '13')
{
include('pages/servicestatus.php');
}
else
{
$rawdata = fetch_article($db->real_escape_string($_GET['id']));
if (!$rawdata) {
$title = "";
$meta['keywords'] = "";
$meta['description'] = "";
} else {
$title = stripslashes($rawdata['title']);
$meta['keywords'] = stripslashes($rawdata['htmlkeywords']);
$meta['description'] = stripslashes($rawdata['htmldesc']);
$subs = stripslashes($rawdata['subs']);
$pagecontent = "<article>" . stripslashes($rawdata['content']) . "</article>";
}
include("includes/header.php");
echo $pagecontent;
if (!$rawdata) {
error_404();
}
}
}
else
{
include('pages/home.php');
}
答案 4 :(得分:1)
是的,开关评估一次,效率高于if elseif
,
并且使用这个给定的结构更容易维护
switch ($_GET['id'])
{
case 13: ... break;
case 0 : ... break;
default: ... break;
}
答案 5 :(得分:1)
我不知道,如果你应该或不应该,但在这里我不会。主要原因是,至少有一个声明,你可以省略,然后,你将只有一个if-elseif-else
- 声明
if (empty($_GET['id'])) { /* code */ }
elseif ($_GET['id'] === '13') { /* code */ }
elseif (!empty($_GET['id'])) { /* code* }
与
相同if (empty($_GET['id'])) { /* code */ }
elseif ($_GET['id'] === '13') { /* code */ }
else { /* code* }
在此之后的块中,语句if(!$rawdata)
也是重复的。