为什么我的switch语句无法生成正确的结果?

时间:2018-08-30 06:07:53

标签: php get switch-statement conditional default-value

我正在使用条件和开关来确定一些变量的一些默认值,但是我没有得到期望的结果。

单击链接<a href="index.php?post=myFile"></a>时,我希望在开关中执行第一种情况,但是所需的变量不会被覆盖。

这是我的index.php中的代码:

$titulo = '';
$keywords = '';
$descricao = '';
$post = empty($_GET['post']) ? '' : $_GET['post'];
$pagina = empty($_GET['p']) ? 'home' : $_GET['p'];

if (empty($post)) {
    switch ($pagina):
    case 'posts/myFile':
        $titulo = 'this variable doesnot change the value on this file';
        $keywords = 'this variable doesnot change the value on this file';
        $descricao = 'this variable doesnot change the value on this file';
        break;
    case 'privacidade':
        $titulo = 'Privacidade ';
        break;
    case 'ultimasnoticias':
        $titulo = 'Ultimas Noticias';
        break;
    default:
        $titulo = 'Home';
        $pagina = 'home';
    endswitch;
} else {
    $titulo = 'Post';
}

我当前的结果是:

$_GET["post"] = "myFile";
$titulo = "Post";
$keywords = "";
$descricao = "";
$pagina = "home";

我想要的结果是:

$_GET["post"] = "myFile";
$titulo = 'this variable doesnot change the value on this file';
$keywords = 'this variable doesnot change the value on this file';
$descricao = 'this variable doesnot change the value on this file';
$pagina = "home";

为什么我不能使用第一个case语句更新变量?

编辑:

enter image description here

这是我的index.php中nav bar中的代码:

<nav>
   <ul>
     <li><a href="?p=home">Início</a></li>
     <li><a href="?p=ultimasnoticias">Últimas Notícias</a>
     <li><a href="?p=contato">Contato</a></li>
  </ul>
</nav>

1 个答案:

答案 0 :(得分:0)

加载index.php?post=myFile时,您正在$_GET超全局数组中生成以下元素:

$_GET = array ("post" => "myFile");

然后$post = empty($_GET['post']) ? '' : $_GET['post'];声明$post = "myFile"

这意味着if (empty($post)) {的计算结果为false(因为它不为空,因此为myFile),并且switch-case块被忽略。

执行else条件。 $titulo = 'Post';


现在,如果要执行switch-case块,则必须:

  • if (empty($post)) {更改为if (!empty($post)) {

对于将来可能遇到的麻烦,您可能会在切换用例块中找到,请在编写每种用例时确保与$pagina的值相同。如果不确定所使用的值是什么或正在执行的值,只需在每种情况下添加回显即可弄清。

之所以这样说,是因为posts/myFilemyFile是不同的字符串。


在对其他超链接进行了更多讨论之后,我建议更改$pagina的默认值,并将if逻辑扩展为更具包容性。

$pagina = empty($_GET['p']) ? '' : $_GET['p'];         // I changed 'home' to ''

if ($post != '' || ($post == '' && $pagina != '')) {   // I changed the logic