echo get_option('bp-username-field');
и эхо get_option('bp-email-field');
соответственно выходы checked
а также 0
, но с этим кодом оба случая работают. т.е. как привет от имени пользователя, так и привет от электронной почты.
switch("checked")
{
case get_option('bp-username-field'):
echo 'hello from username';
case get_option('bp-email-field'):
echo 'hello from email';
...
}
И если я изменюсь switch("0")
это только отголосок привет от электронной почты. Кроме того, с swith(0)
оба дела работают. Что это за поведение?
Вы должны добавить break
после дела. Если не все дела будут выполнены. Это нормальное поведение для switch
Заявления
switch("checked")
{
case get_option('bp-username-field'):
echo 'hello from username';
break;
case get_option('bp-email-field'):
echo 'hello from email';
...
}
Вы, вероятно, пропали без вести break
switch("checked")
{
case get_option('bp-username-field'):
echo 'hello from username';
break;
case get_option('bp-email-field'):
echo 'hello from email';
break;
...
}
Когда первый случай будет выполнен, вам нужно сломать переключатель. Вы должны представить break
прервать выполнение остальных дел, следующих за выбранным делом.
когда switch(0)
был вызван, это последний случай (на данный момент), поэтому он не выполняет тот, что перед вторым случаем.
переключатель / случай делает слабое сравнение. Это значит, что "checked" == 0
является true
, Что вы хотите сделать, это:
switch(true)
{
case get_option('bp-username-field') === "checked":
echo 'hello from username';
case get_option('bp-email-field') === "checked":
echo 'hello from email';
...
}
Но в операторе switch условие оценивается только один раз, а результат сравнивается с каждым оператором case. Это значит, что после первого case
это оценить как true
, все остальные case
будет выполняться до конца переключателя. Что вы действительно хотите это:
if (get_option('bp-username-field') === "checked") {
echo 'hello from username';
}
if (get_option('bp-email-field') === "checked") {
echo 'hello from email';
}
Потому что ваше утверждение неверно;
Вы должны сравнить переменную, которая когда-либо находится внутри switch (переменная), со всеми этими случаями. например.
$favcolor = "red";
switch ($favcolor) {
case "red":
echo "Your favorite color is red!";
break;
case "blue":
echo "Your favorite color is blue!";
break;
case "green":
echo "Your favorite color is green!";
break;
default:
echo "Your favorite color is neither red, blue, nor green!";
}