为什么我的 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/myFile
与 myFile
不是同一个字符串。
在对其他超链接进行更多讨论后,我建议更改 $pagina
的默认值并扩展 if
逻辑以使其更具包容性。
$pagina = empty($_GET['p']) ? '' : $_GET['p']; // I changed 'home' to ''
if ($post != '' || ($post == '' && $pagina != '')) { // I changed the logic
我正在使用一个条件和一个开关来确定一些变量的一些默认值,但我没有得到我期望的结果。
当点击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/myFile
与 myFile
不是同一个字符串。
在对其他超链接进行更多讨论后,我建议更改 $pagina
的默认值并扩展 if
逻辑以使其更具包容性。
$pagina = empty($_GET['p']) ? '' : $_GET['p']; // I changed 'home' to ''
if ($post != '' || ($post == '' && $pagina != '')) { // I changed the logic