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
相关产品推荐
相关产品推荐

