0

我想知道在 PHP 中是否可以执行以下操作:

<?php echo "Hello {isset($name) ? $name : 'World'}!\n"; ?>

还是我必须执行以下操作?

<?php echo "Hello " . ( isset($name) ? $name : 'World' ) . "!\n"; ?>

一般来说,我更喜欢替换而不是串联,因为我发现字符串串联会使字符串过长,从而使字符串更难阅读。

其上下文是我正在根据数据库查询决定默认情况下应该选择 select 标记中的哪个选项。

完整的上下文:

<?php   
echo "
<form action='add_demographics.php' method='post'>
   <table>
      <input type=hidden name=userId value='{$_SESSION['username']}'/>
      <tr><td>User ID:</td><td>{$_SESSION['username']}</td></tr>";

foreach ($inputLabels as $i => $value)
{
    echo "
      <tr>
         <td>{$value['text']}</td>
         <td><select name=$i>";

    foreach ($value["options"] as $optionName => $optionValue)
    {
    echo "
            <option value=$optionValue {($result[$i]==$optionValue ? ' selected=true' : '')}>$optionValue</option>";
    }
    echo "
          </select></td>
      </tr>";
}

echo "
      <tr><td><input type='submit' name='submit' value='Submit' /></td></tr>
   </table>
</form>";
?>
4

6 回答 6

2

不,不能那样做。您需要在字符串和连接之外执行此操作。php 在字符串中唯一要做的就是查找和评估单个 $var(无表达式) - 如果您使用双引号或等效的 heredoc(php 不会在单引号中评估 vars)

于 2011-01-06T16:59:12.003 回答
1

不,不可能按照您要求的方式进行。

但是,针对您的特定问题的解决方案可能是在 foreach 循环的顶部分配一个变量以保存是否应选择该选项,然后将该变量作为输出的一部分回显:

foreach ($value["options"] as $optionName => $optionValue)
{
    $selected = $result[$i] == $optionValue ? "selected='selected'" : "";
    echo "
        <option value=$optionValue $selected>$optionValue</option>";
}
于 2011-01-06T17:00:10.063 回答
1
<?
    function is($var,$sub){
      return isset($var)?$var:$sub;
    }

    echo 'Hello, '.is($name,'World').'!\r\n';

    $name = 'Bob';

    echo 'Hello, '.is($name,'World').'!\r\n';
?>

也许是为了人手不足?

于 2011-01-06T17:01:39.330 回答
0

你可以这样做:

$default = "World";
$name = "Dunes";
echo "Hello {${isset($name) ? 'name' : 'default'}}";

来自网络的更新:

“永远不要这样做,因为使用三元运算符来引用丢弃的变量变量只是为了避免连接,这绝对是一种恶劣的编码实践!

于 2011-01-06T17:14:51.517 回答
0

鉴于你想做什么。我会说

$string = isset($name) ? $name : 'World';
$result = "Hello $string!\n";
echo $result;
于 2011-01-06T17:00:41.147 回答
0

它从来不是真正需要的。
学习使用模板。HTML 应该是 HTML,而不是一些用 PHP 硬编码的抽象数据

<form action='add_demographics.php' method='post'>
   <table>
      <input type=hidden name=userId value='<?=_h($_SESSION['username'])?>'/>
      <tr><td>User ID:</td><td><?=_h($_SESSION['username'])?></td></tr>
<? foreach ($inputLabels as $i => $value): ?>
      <tr>
         <td><?=_h($value['text'])?></td>
         <td><select name="<?=$i?>">
<?   foreach ($value["options"] as $optionName => $optionValue): ?>
            <option value="<?=$optionValue?>" <? if ($result[$i]==$optionValue): ?> selected=true<? endif ?>>
              <?=$optionValue?>
            </option>
<?   endforeach ?>
          </select></td>
      </tr>
<? endforeach ?>
      <tr><td><input type='submit' name='submit' value='Submit' /></td></tr>
   </table>
</form>
于 2011-01-06T17:25:45.247 回答