2011-12-22 39 views
0

我在這裏有一個問題,我正在尋找有經驗的程序員告訴我哪個是首選解決方案。PHP Switch Statement其中字符串被封裝在雙引號

我有報價被包圍的值被返回。兩個例子是"TOTAL""VALUE"。這些不應與TOTALVALUE相混淆 - 字符串實際上被雙引號包圍。

我注意到的是,switch語句下面不起作用,因爲它是尋找TOTAL"TOTAL"

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

得到這個工作,我不得不把一個單引號周圍的情況下 - '"TOTAL"' 。 在我的文本編輯器(Notepad ++)中,很難看到圍繞雙引號的單引號。

我知道這不是一個常見問題,但是解決這個問題的「專業」方式是什麼?我做到了這一點,或者我應該從引用的字符串中提取字符串,並徹底廢除雙引號..?

謝謝!

回答

1

您碰到的情況確實很常見,您可以通過幾種不同的方式瞭解它。你做這件事的方式沒有問題,或@KyleBanks解決方案(轉義雙引號)。鑑於PHP提供單引號和雙引號字符串定義,我更喜歡第一個。但它取決於你的偏好,或你的開發團隊。

至於提取字符串中的子字符串引號..這取決於他們在那裏的第一個地方。

+0

我正在解析一個文件,所以原作者打算將該值包含在引號內。我無法控制這一點,只有我解析的方式:)。我將在雙引號字符串周圍使用單引號。謝謝! – pr0tocol 2011-12-22 23:33:51

+0

如果你不需要引用你的程序的目的,你可以解析他們,避免使用你的代碼中的引號,是嗎? – 2011-12-22 23:43:10

2
case "\"TOTAL\"": 

轉義內部雙引號。它會以相同的方式工作,並且可能會對讀者更清晰可見

1

我會建議在Notepad ++中使用更好的字體。我個人使用索拉但是在這裏你可以找到其他好的選擇堆: Recommended Fonts for Programming?

其他然後改變字體逃逸引號的建議是另一種選擇:

case "\"TOTAL\"": 

您也可以嘗試剝離報價:

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

但我認爲這是一個更危險的方法,除非你開始使用更復雜的代碼去除它們與檢查和一切,在這種情況下,它顯然變成了一個矯枉過正。

+1

switch(trim($ statTypeName,''')){...}更清潔,而且危險性更低 – 2011-12-23 00:13:43

+0

這是一個很好的評論,我不知道trim的第二個參數 – 2011-12-23 01:43:56

0

除非您的給定代碼不是某種StatType類的一部分,並且在內部處理stat類型狀態的表示,我的答案可能會略微缺少這一點,但在任何情況下都是如此。

事實上,你在這裏做錯了什麼,你問的是尋找一種方法來解決你所遇到的基本問題。相反,你應該修復基本問題。

重要的問題是你缺少一個抽象層,它將坐在代表你的statType的方式和你使用它的方式之間。

所以,你的程序不應該關心如果你打電話給StatType標識:

「總」或「‘總’」或「總」或「總」

你需要什麼關心的是你的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; 
} 
相關問題