2

PHPで連想配列と定数を使用して一種の知識ツリー/オントロジーを構築する方法を理解しようとしています。次の例は、私がやろうとしていることを示しています。

class Fruit {
    public static $TYPES = array("APPLE" => array("GREEN" => Apple::GREEN), array("RED" => Apple::RED)); 
}

class Apple {
    public static $GREEN = array("GRANNY_SMITH" => array("FLAVOUR" => array(Flavour::SHARP, Flavour::SWEET)), 
                                 "GOLDEN_DELICIOUS" => array("FLAVOUR" => array(Flavour::SWEET, Flavour::BLAND))); 

    public static $RED = array("RED_DELICIOUS" => array("FLAVOUR" => array(Flavour::SOUR, Flavour::SHARP)), 
                               "PAULA_RED" => array("FLAVOUR" => array(Flavour::SWEET, Flavour::SOUR)));  
}

class Flavour {
    const SHARP = "sharp";
    const SWEET = "sweet";
    const SOUR = "sour";
    const BLAND = "bland";
}

これから、次のような値を取得できるようにしたいと思います。

$flavours = Fruit::TYPES["APPLE"]["GREEN"]["GOLDEN_DELICIOUS"];

だから基本的に私はゴールデンデリシャスのリンゴに関連するフレーバーのリストを取得しています...PHPでこのような静的データツリーを表現するためのより良い方法はありますか?Javaでは列挙型を使用します...

4

2 に答える 2

3

不変配列に関するコメントへの回答:

クラス ImmutableArray は ArrayObject を拡張します
{
    const ERROR = '不変配列!';

    public function __construct($input, $flags = 0, $iterator_class = 'ArrayIterator') {
        parent::__construct($input, $flags, $iterator_class);
    }

    public function __get($key) {
        $this->offsetGet($key); を返します。
    }

    public function __isset($key) {
        $this->offsetExists($key) を返します。
    }

    public function __set($key, $value) {
        新しい例外をスローします (self::ERROR);
    }

    public function __unset($key) {
        新しい例外をスローします (self::ERROR);
    }

    public function append($value) {
        新しい例外をスローします (self::ERROR);
    }

    パブリック関数 asort() {
        新しい例外をスローします (self::ERROR);
    }

    パブリック関数 ksort() {
        新しい例外をスローします (self::ERROR);
    }

    パブリック関数 natcasesort() {
        新しい例外をスローします (self::ERROR);
    }

    パブリック関数 natsort() {
        新しい例外をスローします (self::ERROR);
    }

    public function offsetSet($key, $value) {
        新しい例外をスローします (self::ERROR);
    }

    public function offsetUnset($key) {
        新しい例外をスローします (self::ERROR);
    }

    public function uasort($cmp_function) {
        新しい例外をスローします (self::ERROR);
    }

    public function uksort($cmp_function) {
        新しい例外をスローします (self::ERROR);
    }
}
于 2012-08-08T06:45:27.033 に答える