Другой угол на Как написать HTML-код внутри PHP?

Мы пишем код PHP внутри кода HTML через <?php ... ?> теги. Поэтому обычно не имеет смысла писать HTML-код внутри PHP-кода, который уже находится внутри HTML-кода, если вы можете просто выйти из PHP для нужных вам строк. Но что, если вам нужен код HTML в той же строке, что и код PHP?

Мой пример будет выглядеть так:

<div>
    <?php ($bool) ? <script>...</script> : <script></script> ?>
</div>

Это:

<div>
    <?php if($bool): ?>
        <script>...</script>
    <?php else: ?>
        <script>...</script>
    <?php endif; ?>
</div>

единственный способ?

Примечание: вместо <script> ты мог бы иметь <h1>, <strong>, <title> или любой другой "однострочник".

Заранее спасибо.

4 ответа

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

Тем не менее, для одного лайнера, вы можете сократить <?php echo '...' ?> с <?= '...' ?> и заверните HTML в одинарных или двойных кавычках, в зависимости от того, используете ли вы двойные кавычки в вашем HTML синтаксис. Вы также можете избежать их, если хотите, но это было бы грязно.

<div>
    <?= ($bool) ? "<script>...</script>" : "<script></script>" ?>
</div>

Чтобы напечатать любую строку в ваш HTML-код из фрагментов PHP, используйте функцию echo.

http://php.net/manual/en/function.echo.php

Так что вам просто нужно добавить эхо

<div>
<?php 
    if($bool) {
     echo '<script>...</script>';
    } else {
     echo '<script>...</script>';
    } ?>

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

Важное примечание: в настоящее время я использую Laravel Framework, и если вы этого не знаете, вам обязательно стоит познакомиться с ним (хотя есть альтернативы).

Но я начал сильно следить за архитектурой MVC еще до этого. Так что даже до шаблонов Laravel Blade мои представления выглядели примерно так.

      <html>
<body>
    <?php if ($isUserAuthenticated) : ?>
        <div>
            <span>Welcome <?= $username ?>
        </div>
    <?php else : ?>
        <a href="login">Login</a>
    <?php endif ?>
</body>
</html>

Как видите, в представлении нет абсолютно никаких манипуляций с данными.

Я также изо всех сил старался не хранить строки HTML в переменных, но иногда это приводит к меньшему количеству кода, поэтому я сделал что-то вроде следующего.

      $alert = match($errorCode) {
  1 => <<<HTML
    <div class="alert alert-danger">Big error</div>
    HTML,
  2 => <<<HTML
    <div class="alert alert-warning">Small error</div>
    HTML,
  default => ""
};

Таким образом, я могу поддерживать подсветку синтаксиса (в VSCode) для HTML.

Примечание: выражение соответствия является новым в PHP8, но вы могли добиться того же и раньше с помощью оператора switch.

Другие вопросы по тегам