You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何格式化长echo输出语句以提升代码可读性?

优化PHP输出HTML代码可读性的常用方案

PHP输出HTML时避免长串拼接、提升可读性有几种行业内通用的写法:


方案1:预存变量+heredoc语法

heredoc本身不支持直接调用函数,但你可以提前把函数返回值、动态内容赋值给变量,再放到heredoc中使用,不需要转义引号,结构非常清晰:

foreach ($categories as $category) {
    $cat_class = ($category->term_id == get_queried_object_id()) ? 'active' : '';
    // 提前把函数返回值存入变量
    $cat_link = get_category_link($category->term_id);
    $cat_name = $category->name;
    // heredoc输出,变量直接写在结构里
    echo <<<HTML
    <li class="post-categories__item {$cat_class}">
        <a class="post-categories__link" href="{$cat_link}">{$cat_name}</a>
    </li>
HTML;
}

方案2:PHP与HTML混写(最推荐)

这是CMS类项目(比如WordPress)中最常用的写法,直接关闭PHP标签输出原生HTML,需要动态内容时再用短输出标签<?=注入,完全不需要处理字符串拼接和引号转义,缩进完全对齐HTML层级,可读性最高:

function list_categories() {
    $categories = get_categories([
        'taxonomy'     => 'category',
        'type'         => 'post',
        'orderby'      => 'name',
        'order'        => 'DESC',
        'hierarchical' => false,
    ]);
    // 关闭PHP标签直接写HTML
    ?>
    <div class="post-categories post-items__categories">
        <span class="post-categories__title">Categories:</span>
        <ul class="post-categories__list">
            <li class="post-categories__item">
                <a class="post-categories__link">All categories</a>
            </li>
            <?php foreach ($categories as $category) : 
                $cat_class = ($category->term_id == get_queried_object_id()) ? 'active' : '';
            ?>
            <li class="post-categories__item <?=$cat_class?>">
                <a class="post-categories__link" href="<?=get_category_link($category->term_id)?>">
                    <?=$category->name?>
                </a>
            </li>
            <?php endforeach; ?>
        </ul>
    </div>
    <?php
}

如果你的环境禁用了短标签,把<?=替换成<?php echo 即可。


方案3:拆分echo语句对齐层级

如果不想用上面两种写法,可以把每个独立的HTML标签拆成单独的echo语句,按HTML的层级缩进对齐,也比挤在一行可读性高很多:

echo '<div class="post-categories post-items__categories">';
    echo '<span class="post-categories__title">Categories:</span>';
    echo '<ul class="post-categories__list">';
        echo '<li class="post-categories__item">';
            echo '<a class="post-categories__link">All categories</a>';
        echo '</li>';
        foreach ($categories as $category) {
            $cat_class = ($category->term_id == get_queried_object_id()) ? 'active' : '';
            $cat_link = get_category_link($category->term_id);
            echo '<li class="post-categories__item '.$cat_class.'">';
                echo '<a class="post-categories__link" href="'.$cat_link.'">';
                    echo $category->name;
                echo '</a>';
            echo '</li>';
        }
    echo '</ul>';
echo '</div>';

内容的提问来源于stack exchange,提问作者leonscander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:54:02