2011-05-16 49 views
4

問候計算器PHP恆約定

我正在做一些打掃衛生,我想我會要求在PHP一些建議的做法,爲我重新因子我的班。特別是,我有一些類別常量屬於類別,我想知道一些好的方法來組合具有共同目的的常量。

一個例子:

class MySquare { 
    // Colors 
    const COLOR_GREEN = "green"; 
    const COLOR_RED = "red"; 

    // Widths 
    const WIDTH_SMALL = 100; 
    const WIDTH_MEDIUM = 500; 
    const WIDTH_BIG = 1000; 

    // Heights 
    const HEIGHT_SMALL = 100; 
    const HEIGHT_MEDIUM = 300; 
    const HEIGHT_BIG = 500; 
} 

顯然,這工作,但似乎有可能是很多的選擇,當涉及到將相關常數,我敢肯定,這是不如最。你會怎麼做?

+0

,基本上是我如何做到這一點。 – Neal 2011-05-16 21:32:09

+0

較新推薦的方法是使用名稱空間而不是類來保存一系列值。類方法有效,但它是OOP系統的濫用。 – 2011-05-16 21:34:32

+0

@MarcB這個建議很吸引我,但不幸的是我不確定它實際上會是什麼樣子。 (如果你沒有時間,不要求答案,但如果你確實有一分鐘的時間,並且可以給出一個很棒的例子)。同時,我會在PHP命名空間上閱讀一些內容。 – slifty 2011-05-16 21:37:53

回答

4

有許多PHP公約,它們都是矛盾的。但我確實使用了類似的符號,儘管我喜歡對每個類的常量進行分組,所以我將有一個帶有常量的類 Height(或MySquare_Height)。這樣,我可以像使用其他語言一樣將它用作Enum的一種。尤其是當您使用高亮顯示的編輯器時。

<? 
abstract class MySquare_Color 
{ 
    const GREEN = 'Green'; 
    const RED = 'Red'; 
} 

abstract class MySquare_Height 
{ 
    const SMALL = 100; 
    const MEDIUM = 300; 
    const BIG = 500; 
} 

如果找你使用PHP 5.3,你可以命名類顏色和高度,並把它們放在一個MySquare命名空間:

<?php 
// Namespace MySquare with subnamespace Width containing the constants. 
namespace MySquare\Width 
{ 
    const SMALL = 100; 
    const MEDIUM = 300; 
} 

namespace 
{ 
    // Refer to it fromout another namespace 
    echo MySquare\Width\SMALL; 
} 


?> 
+0

根據請求添加名稱空間解決方案。 – GolezTrol 2011-05-16 22:32:44

1

由於PHP沒有枚舉,所以你的方法非常好。

3

爲Variant,你可以創建一些接口,在那裏你可以定義常量。更多的代碼,但是...分組:)

interface IColorsConstants 
{ 
    const COLOR_GREEN = "green"; 
    const COLOR_RED = "red"; 
} 

interface IWidths 
{ 
    const WIDTH_SMALL = 100; 
    const WIDTH_MEDIUM = 500; 
    const WIDTH_BIG = 1000; 
} 

interface IHeights 
{ 
    const HEIGHT_SMALL = 100; 
    const HEIGHT_MEDIUM = 300; 
    const HEIGHT_BIG = 500; 
} 

class MySquare implements IColorsConstants, IHeights, IWidths 
{ 

} 
+0

不錯的解決方案,它也可以。太糟糕了,我的工具(PHPDesigner 7)的代碼完成不會識別接口常量,而只會識別類常量。 :( – GolezTrol 2011-05-16 22:24:52

+1

@GolezTrol嘗試使用NetBeans或PhpStorm。我希望PHP Designer有時會成長爲這些IDE的替代品。 – 2011-05-16 22:30:15