Frage

Ich frage mich, ob so etwas wie die folgenden möglich wäre, in PHP:

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

oder muss ich folgendes tun?

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

Im Allgemeinen I Substitution über Verkettung bevorzugen, wie ich, dass die String-Verkettung finde Saiten härter machen, indem man sich zu lange zu lesen.

Der Kontext von denen ist, dass ich die Entscheidung, welche Option in einem ausgewählten Tag sollte standardmäßig basierend auf einer Datenbankabfrage ausgewählt werden.

Der vollständige Kontext:

<?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>";
?>
War es hilfreich?

Lösung

Sie können etwas tun:

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

UPDATE von webbiedave:

"Nicht immer dies tut, wie es absolut scheußlich ist Praxis Codierung den ternären Operator zu verwenden, um eine Wurf entfernt variable Variable einfach zu vermeiden Verkettung zu verweisen!

Andere Tipps

Nein, das geht nicht. Sie müssen es tun, außerhalb des Strings und concat. Das einzige, was PHP wird in einem String zu tun ist, sucht und bewertet eine einzelnen $ var (keine Ausdrücke) - wenn Sie doppelte Anführungszeichen oder gleichwertigen heredoc verwenden (PHP wertet nicht Vars in einfachen Anführungszeichen)

Nein, es ist nicht möglich, es so zu tun, werden Sie fragen.

Eine Lösung für Ihr spezielles Problem könnte jedoch sein, eine Variable an der Spitze der foreach-Schleife zu halten zuweisen, ob diese Option ausgewählt werden soll, Echo dann diese Variable als Teil Ihrer Ausgabe:

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';
?>

Vielleicht für Kurzgabe das?

Nach dem, was Sie tun mögen. Ich würde sagen,

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

Es ist nie tatsächlich erforderlich ist.
Erfahren Sie Vorlagen. HTML sollte HTML, nicht einige abstrakte Daten fest einprogrammiert in PHP

sein
<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top