【问题标题】:PHP Error when echoing string回显字符串时出现PHP错误
【发布时间】:2014-05-03 21:00:12
【问题描述】:

我想回显我的字符串,但我遇到了一些问题。 我得到的错误是:

解析错误:语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING

代码:

for($i = 1; $i <= 31; $i++){   
$Text="<option value='".$i."'<?php if(@$_POST['geb_tag'] == '".$i."') { ?> selected <?php ;}?>>".$i."</option>";
echo $Text;}                                                        

【问题讨论】:

  • php标签中不能有php标签。
  • 您缺少分号,我不知道您的目标是否实际上是“打印”一些 PHP 代码……但我不这么认为。

标签: php echo


【解决方案1】:

您在尝试字符串连接时混合了 PHP 标记。将您的 if 语句取出并将其放在自己的语句中。然后将该变量添加到您的字符串中:

$Text="<option value='".$i."'<?php if(@$_POST['geb_tag'] == '".$i."') { ?> selected <?php ;}?>>".$i."</option>"

变成:

$selected = (@$_POST['geb_tag'] == $i) ? ' selected' : '';
$Text="<option value='".$i."'" . $selected .">".$i."</option>";

有几点:

  1. 你的字符串很乱。有更好的方法可以将 PHP 变量添加到字符串以使其更具可读性。

  2. 不要使用@。您应该检查是否设置了该变量。

.

$selected = (isset($_POST['geb_tag']) && $_POST['geb_tag'] == $i) ? ' selected' : '';
$Text= "<option value='{$i}'{$selected}>{$i}</option>";

【讨论】:

  • 非常感谢!我真的很喜欢 Stackoverfolw !顺便说一句。
  • 使用三元运算符更简洁(并且更清晰)。 +1 约翰 ;-)
【解决方案2】:

有很多方法可以做到这一点,这里还有一种方法:printf()。这是一种重组字符串(分离部分)的老式方法,可能会提高可读性。

# a descriptive variable name can improve readability
$posted_value = "";
if( isset( $_POST['geb_tag'] ) ) $posted_value = $_POST['geb_tag'];

for( $i = 0; $i <= 31; $i++ ) {
    printf(
        "<option value='%s'%s>%s</option>",
        $i,
        ($posted_value == $i) ? ' selected' : '',
        $i
    );
}

想法是用%s 标记的字符串部分将被适当的参数替换。连接字符串没有错,但它可能会变得混乱。 printf() 有一个 sprintf() 变体,它将所有内容都作为字符串返回,以防您以后想显示它。

最后,有很多程序员不喜欢(statement ? '' : ''),但如果使用得当,它会有所帮助。它基本上意味着如果语句部分是真的,使用它。如果为假,则使用另一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-09
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多