PHP Switch Statement, где строка заключена в двойные кавычки - PullRequest
0 голосов
/ 23 декабря 2011

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

У меня возвращаются значения, заключенные в кавычки."TOTAL" и "VALUE" являются двумя примерами.Их не следует путать с TOTAL и VALUE - строка на самом деле заключена в двойные кавычки.

Я заметил, что приведенный ниже оператор switch не работает, потому что ищет TOTALне "TOTAL":

switch ($statTypeName) {
    case "TOTAL":
        echo "<br>TOTAL";
        break;
    case "VALUE":
        echo "<br>VALUE";
        break;
}

Чтобы это сработало, мне пришлось заключить в кавычку одну кавычку - '"TOTAL"'.В моем текстовом редакторе (Notepad ++) трудно увидеть одинарные кавычки вокруг двойных кавычек.

Я знаю, что это не обычная проблема, но каков будет «профессиональный» способ решения этой проблемы?То, как я это сделал, или я должен был извлечь строку из строки в кавычках и вообще покончить с двойными кавычками ..?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 23 декабря 2011
 case "\"TOTAL\"":

Избегайте внутренних двойных кавычек.Он будет работать так же и может быть немного более видимым для читателя

1 голос
/ 23 декабря 2011

Я бы предложил использовать лучший шрифт в Notepad ++. Я лично использую Consolas, однако здесь вы можете найти кучу других хороших вариантов: Рекомендуемые шрифты для программирования?

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

 case "\"TOTAL\"":

Вы также можете попробовать удалить цитаты:

switch (substr($statTypeName, 1, -1)) {...}

но я считаю это более опасным подходом, если только вы не начнете использовать более сложный код, чтобы лишить их чеков, и все, в этом случае это явно становится излишним.

1 голос
/ 23 декабря 2011

То, с чем вы сталкиваетесь, действительно распространено, и вы можете сделать это несколькими разными способами.Нет ничего плохого в том, как вы это делаете, или в решении @KyleBanks (избегая двойных кавычек).Поскольку php предоставляет определения строк в одинарных и двойных кавычках, я предпочитаю первое.Но это зависит от ваших предпочтений или от вашей команды разработчиков.

Что касается извлечения подстроки в строковых кавычках ... это зависит от того, для чего они предназначены.

0 голосов
/ 23 декабря 2011

За исключением случаев, когда данный код не является частью какого-либо класса StatType и имеет внутреннее отношение к представлению состояний типа stat, мой ответ может немного упустить точку, но в любом случае здесь это так.

На самом деле вы делаете что-то не так, и вы просите найти способ обойти существенную проблему, с которой вы столкнулись. Вместо этого вам следует решить существенную проблему.

Существенная проблема заключается в том, что вам не хватает одного слоя абстракции, который будет находиться между тем, как вы представляете свой statType, и тем, как вы его используете.

Итак, ваша программа не должна заботиться о том, чтобы вы вызывали свой statType:

«ВСЕГО» или «ВСЕГО» или «Всего» или «Всего» * ​​1010 *

Вам нужно позаботиться о том, чтобы ваш statType находился в определенном состоянии в один момент выполнения программы. Как это представление состояния реализовано (строка с кавычками или числом) - это деталь реализации, и ваш оператор switch не должен заботиться об этом.

Что произойдет, если вы решите изменить свой statTypeName, например, без кавычек. Затем вам нужно будет перейти к каждой строке кода, которая зависит от нее, с кавычками, и изменить ее. Если бы вы каким-то образом скрыли детали реализации, вам не нужно было бы изменять более одной строки кода.

Может быть, один подход к настройке абстракции вокруг statTypes? (упрощено для ясности)

class StatType
{
    const TOTAL = 0;
    const VALUE = 1;
    // etc.
}

switch ($statType->type()) {
    case StatType::TOTAL:
        echo "<br>TOTAL";
        break;
    case StatType::VALUE:
        echo "<br>VALUE";
        break;
}
...