Вопрос

Мне было интересно, будет ли что-то вроде следующее в PHP:

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

Или мне нужно сделать следующее?

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

В общем случае я предпочитаю подстановку по поводу конкатенации, когда я обнаруживаю, что конкатенация строки может сложнее прочитать строки, делая их слишком долго.

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

Полный контекст:

<?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>";
?>
Это было полезно?

Решение

Вы могли бы сделать что-то вроде этого:

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

Обновление от WebBiedave:

«Никогда не делайте этого, поскольку это абсолютно зверная практика кодирования для использования Темнарного оператора для ссылки на выброс вариабельной переменной просто чтобы избежать конкатенации!

Другие советы

Нет, не могу этого сделать. Вы должны сделать это за пределами строки и Concat. Единственное, что PHP будет делать внутри строки, ищите и оценивают один $ var (без выражений) - если вы используете двойные кавычки или эквивалентные Heredoc (PHP не оценивает варс в одиночных кадинатах)

Нет, это невозможно сделать так, как вы спрашиваете.

Однако решение вашей конкретной задачи может быть назначать переменной в верхней части панели FOREACH для удержания того, следует ли выбрать эту опцию, то эхо, что переменная как часть вашего вывода:

foreach ($value["options"] as $optionName => $optionValue)
{
    $selected = $result[$i] == $optionValue ? "selected='selected'" : "";
    echo "
        <option value=$optionValue $selected>$optionValue</option>";
}
<?
    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';
?>

Может быть, для короткой руки?

Учитывая то, что вы хотите сделать. я бы сказал

$string = isset($name) ? $name : 'World';
$result = "Hello $string!\n";
echo $result;

Это никогда не требуется.
Учитесь использовать шаблоны. 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top