3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * @package Joomla.Site * @subpackage mod_menu * * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Note. It is important to remove spaces between elements. ?> <?php // The menu class is deprecated. Use nav instead. ?> <ul class="nav <?php echo $class_sfx;?>"<?php $tag = ''; /* Never call the same method twice for the same result. There is no benefit to appending a zero-length string to a variable if ($params->get('tag_id') != null) { $tag = $params->get('tag_id') . ''; echo ' id="' . $tag . '"'; }*/ $tagId = $params->get('tag_id'); echo $tagId ? ' id="' . $tagId . '"' : ''; ?>> <?php /* Don't declare $i if you never intend to use it. * Never count() the same unchanged iterable twice -- save the count as a variable. * For declared array variables, to check if non-empty just check if "truthy" -- if ($path). * To directly access the last element's value in an array use end(). * $item->type can never be both "separator" and "heading" at the same time -- use elseif(). * $class is unconditionally declared inside the loop and is never empty so the empty() check is always unnecessary. * There is also no chance of leading or trailing whitespace characters in $class, so the trim call can be removed. * Just print the populated $class string directly into the li tag's class attribute. * I haven't wrapped my head around the deeper/shallower logic near the bottom, so I won't review that. * The final case (default in this code) does not need a break; statement. */ foreach ($list as $i => &$item) { $class = 'item-' . $item->id; if ($item->id == $active_id) { $class .= ' current'; } if (in_array($item->id, $path)) { $class .= ' active'; } elseif ($item->type == 'alias') { $aliasToId = $item->params->get('aliasoptions'); if (count($path) > 0 && $aliasToId == $path[count($path) - 1]) { $class .= ' active'; } elseif (in_array($aliasToId, $path)) { $class .= ' alias-parent-active'; } } if ($item->type == 'separator') { $class .= ' divider'; } if ($item->type == 'heading') { $class .= ' muted'; } if ($item->deeper) { $class .= ' dropdown nav-stacked'; } if ($item->parent) { $class .= ' parent'; } if (!empty($class)) { $class = ' class="' . trim($class) . '"'; } echo '<li' . $class . '>'; // Render the menu item. switch ($item->type) : case 'separator': case 'url': case 'component': case 'heading': require JModuleHelper::getLayoutPath('mod_menu', 'default_' . $item->type); break; default: require JModuleHelper::getLayoutPath('mod_menu', 'default_url'); break; endswitch; // The next item is deeper. if ($item->deeper) { echo '<ul class="dropdown-menu">'; } elseif ($item->shallower) { // The next item is shallower. echo '</li>'; echo str_repeat('</ul></li>', $item->level_diff); } else { // The next item is on the same level. echo '</li>'; } } ?></ul>
Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

preferences:
149.59 ms | 402 KiB | 181 Q