【问题标题】:Using IF with curly brackets within IF without在 IF 中使用带有大括号的 IF
【发布时间】:2015-02-25 14:21:18
【问题描述】:

我有一些代码,我试图在彼此之间使用不同的 if,但我遇到了问题。我制作了这个测试代码来显示问题:

<?php
$test = 'lol';
if ($test == 'wat') :
    if (!empty($_GET['wat'])) {
        echo 'well';
    }
elseif ($test == 'lol') :
    echo 'loool';
endif;
die();
?>

这将返回此错误:

解析错误:语法错误,第 7 行 /var/www/domain.com/public_html/test.php 中出现意外的 ':'

但这只是在我添加 if (!empty($_GET['wat'])) { }

问题是,我做错了什么,还是不能在一个没有大括号的情况下使用带有大括号的 if?

【问题讨论】:

  • 您似乎在尝试使用Alternative syntax for control structures。这在使用 PHP 作为“模板语言”时非常有用。唉,根据手册:注意:不支持在同一控制块中混合语法。如果您将内部 'if' 更改为使用 ':' 语法,那么它会按预期工作。跨度>
  • 以正确的方式去做。它的代码很糟糕,而且是个坏主意。把括号放在里面,让你想要的东西清楚明了。

标签: php if-statement


【解决方案1】:

我不确定您要在替代 if 语法语句中使用基本 if 语法来完成什么,但您可能应该避免使用它。这有点奇怪,但以下语法可以正常工作:

$condition = "test";
$other = null;
if ($condition == "test") :
    if (isset($other))
        echo "Set";
    else
        echo "Not Set";
elseif ($condition == "something") :
    echo "Huh";
endif;

上面会回显“未设置”,因为$condition == "test" 为真,而$other 未设置。

我认为您的示例缺少的是基本语法 if 语句的结束 else 语句(我知道不需要,但在这种情况下似乎会导致问题)。将您的代码修改为:

$test = "lol";
if ($test == "wat") :
    if (!empty($_GET["wat"]))
        echo "well";
    else
        echo "Nothing";
elseif ($test == "lol") :
    echo "loool";
endif;

使它编译和运行得很好。这很奇怪,但它似乎有效。

希望能提供一些见解!

编辑

如果是多行,只需在if语句里面加上括号即可:

$test = "lol";
if ($test == "wat") :
  if (!empty($_GET["wat"])){
    echo "well";
    // Do something else
  } else {
    echo "Nothing";
    // More Stuff
  }
elseif ($test == "lol") :
  echo "loool";
endif;

【讨论】:

  • 知道如果有多行我会怎么做吗? ^^
  • 查看我的编辑,展示了如何在if 语句内部处理多行(只需添加括号)。
  • 啊没看到。谢谢!
  • 没问题!正如其他人所说,最好坚持使用其中一个,但了解它们的工作原理仍然很好,所以这是一个有趣的例子。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 2013-08-12
  • 2013-06-14
相关资源
最近更新 更多