Если вы имеете дело с более сложными условными классами или множеством динамических c атрибутов, вы можете рассмотреть возможность определения их в PHP массивах и динамического построения всей строки класса вместо использования различных встроенных условных выражений.
Например:
<?php
$classes=["navbar", "navbar-expand-md", "navbar-light", "fixed-top", "scrolling-navbar"];
if(in_array(basename($_SERVER['PHP_SELF']), ['index.php', 'shop.php', 'news.php']))
$classes[]="navbar-transparent"; //Equivalent to array_push($classes, "navbar-transparent")
?>
<nav class="<?= implode(' ', $classes) ?>"></nav>
Вы можете использовать implode для преобразования массива в список с разделителями-пробелами. Если классы содержат вводимые пользователем или другие сомнительные значения, вы должны использовать htmlentities , а также для экранирования вывода.
Вы можете даже go, чтобы построить все ваши атрибуты как многомерный ассоциативный массив и вывести его. Этот подход, вероятно, является чрезмерным для многих приложений, но может быть практичным, например, в более сложной структуре шаблонов или компонентов.
<?php
function encodeAttributes(array $attributes): string{
$encoded="";
foreach($attributes as $key=>$value){
$encoded.=' '.htmlentities($key);
if($value!==null){ //Allow for attributes without values(for instance disabled or checked)
if(is_array($value))
$value=implode(' ', $value);
$encoded.='="'.htmlentities($value).'"';
}
}
return $encoded;
}
$attributes=[
"id"=>"main_nav",
"class"=>["navbar", "navbar-expand-md", "navbar-light", "fixed-top", "scrolling-navbar"]
];
?>
<nav<?= encodeAttributes($attributes) ?>></nav>