Почему мой оператор switch не дает правильных результатов? - PullRequest
0 голосов
/ 30 августа 2018

Я использую условие и переключатель для определения некоторых значений по умолчанию для нескольких переменных, но я не получаю ожидаемых результатов.

Когда нажата ссылка <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?

Edit:

введите описание изображения здесь

Это код, который находится в моем 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 голосов
/ 30 августа 2018

Когда вы загружаете 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';


Теперь, если вы хотите, чтобы блок переключателя выполнялся, вы должны:

  • Изменить if (empty($post)) { на if (!empty($post)) {.

Что касается будущих проблем, которые могут возникнуть у вас в блоке переключателя, убедитесь, что вы одинаково сопоставляете значение для $pagina при записи каждого случая. Если вы не уверены, с какими значениями вы работаете или что выполняете, просто добавьте эхо в каждом случае, чтобы уточнить.

Я говорю это, потому что posts/myFile не та же строка, что и myFile.


После более подробного обсуждения других гиперссылок я рекомендую изменить значение по умолчанию для $pagina и расширить логику if, чтобы сделать ее более понятной.

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

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