Лучший способ сделать переключатель PHP с несколькими значениями на случай?

Виды Certian математики, я думаю, необходимы. Например, каждый разработчик программного обеспечения должен знать и понять законы De Morgan , и нотация .

O, Другие виды просто очень полезны. На моделировании мы часто должны делать большое моделирование физики. При выполнении графической работы Вы часто должны будете для записи координатных алгоритмов преобразования. У меня было много других ситуаций в моей 20-летней карьере, где я должен был описать и решить одновременные линейные уравнения для выяснения что константы поместить в алгоритм.

67
задан JasonDavis 6 February 2012 в 15:39
поделиться

7 ответов

For any situation where you have an unknown string and you need to figure out which of a bunch of other strings it matches up to, the only solution which doesn't get slower as you add more items is to use an array, but have all the possible strings as keys. So your switch can be replaced with the following:

// 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);

This doesn't look as clean as a switch(), but it is the only fast solution which doesn't include writing a small library of functions and classes to keep it tidy. It is still very easy to add items to the arrays.

51
ответ дан 24 November 2019 в 14:41
поделиться

Версия 1, безусловно, проще для глаз, более ясна в отношении ваших намерений и к ней легче добавлять условия.

Я никогда не пробовал вторую версию. Во многих языках это даже не компилируется, потому что метки каждого case должны оцениваться как константное выражение.

3
ответ дан 24 November 2019 в 14:41
поделиться

Если кто-то когда-либо поддерживал ваш кода, они почти наверняка будут дважды подходить к версии 2 - это крайне нестандартно.

Я бы придерживался версии 1. Я принадлежу к школе, хотя эти операторы case без собственного блока операторов должны иметь явный комментарий // пропустить рядом с ними, чтобы указать, что это действительно ваше намерение провалиться,

4
ответ дан 24 November 2019 в 14:41
поделиться

Я определенно предпочитаю версию 1. Версия 2 может потребовать меньше строк кода, но ее будет очень трудно читать, если у вас будет много значений, как вы прогнозируете.

(Честно говоря, до сих пор я даже не знал, что Версия 2 законна. Я никогда раньше не видел, чтобы это делалось таким образом.)

1
ответ дан 24 November 2019 в 14:41
поделиться

Версия 2 не работает !!

case 'users.online' || 'users.location' || ...

в точности совпадает с:

case True:

, и этот случай будет выбран для любого значения $ p , если $ p не является пустой строкой.

|| Не имеет особого значения внутри оператора case ,

25
ответ дан 24 November 2019 в 14:41
поделиться

Поместите эти многие значения в массив и запросите массив, поскольку случай переключения, кажется, скрывает базовую семантику того, что вы пытаетесь достичь, когда в качестве условия используется строковая переменная, что затрудняет чтение и понимание, например:

$current_home = null;
$current_users = null;
$current_forum = null;

$lotsOfStrings = array('users.online', 'users.location', 'users.featured', 'users.new');

if(empty($p)) {
    $current_home = 'current';
}

if(in_array($p,$lotsOfStrings)) {
    $current_users = 'current';
}

if(0 === strcmp('forum',$p)) {
    $current_forum = 'current';
}
8
ответ дан 24 November 2019 в 14:41
поделиться

Я думаю, что версия 1 - это то, что нужно. Его гораздо легче читать и понимать.

0
ответ дан 24 November 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: