В PHP возможна ли условная замена переменных? - PullRequest
0 голосов
/ 06 января 2011

Мне было интересно, возможно ли что-то подобное в 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>";
?>

Ответы [ 6 ]

2 голосов
/ 06 января 2011

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

1 голос
/ 06 января 2011
<?
    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';
?>

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

1 голос
/ 06 января 2011

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

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

foreach ($value["options"] as $optionName => $optionValue)
{
    $selected = $result[$i] == $optionValue ? "selected='selected'" : "";
    echo "
        <option value=$optionValue $selected>$optionValue</option>";
}
0 голосов
/ 06 января 2011

Это никогда не требуется.
Научитесь использовать шаблоны. 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>
0 голосов
/ 06 января 2011

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

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

ОБНОВЛЕНИЕ от webbiedave:

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

0 голосов
/ 06 января 2011

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

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