Для любой ситуации, когда у вас есть неизвестная строка, и вам нужно выяснить, с какой из других строк она соответствует, единственное решение, которое не замедляется, когда вы добавляете больше элементов использовать массив, но иметь все возможные строки в качестве ключей. Таким образом, ваш переключатель может быть заменен следующим:
// used for $current_home = 'current';
$group1 = array(
'home' => True,
);
// used for $current_users = 'current';
$group2 = array(
'users.online' => True,
'users.location' => True,
'users.featured' => True,
'users.new' => True,
'users.browse' => True,
'users.search' => True,
'users.staff' => True,
);
// used for $current_forum = 'current';
$group3 = array(
'forum' => True,
);
if(isset($group1[$p]))
$current_home = 'current';
else if(isset($group2[$p]))
$current_users = 'current';
else if(isset($group3[$p]))
$current_forum = 'current';
else
user_error("\$p is invalid", E_USER_ERROR);
Это выглядит не так чисто, как switch()
, но это единственное быстрое решение, которое не включает в себя написание небольшой библиотеки функций и классов для поддержания чистоты. Все еще очень легко добавлять элементы в массивы.