为什么我的 switch 语句不能生成正确的结果?

Why won't my switch statement generate the correct results?

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

当点击link <a href="index.php?post=myFile"></a>时,我希望执行切换中的第一个case,但没有覆盖所需的变量。

这是我的代码 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>

加载 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)) {

至于以后在 switch-case 块中可能遇到的麻烦,请确保在编写每个 case 时都完全匹配 $pagina 的值。如果您不确定您正在使用什么值或正在执行什么,只需在每种情况下添加回声来澄清。

我这样说是因为 posts/myFilemyFile 不是同一个字符串。


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

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

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