• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Klassen Enum

T-sneak

Mitglied
Hi Leute,
weis jemand ob es in PHP6 zufällig nun endlich Enumerations wie in anderen Programmiersprachen gibt? Hab in google nur Lösungen über abstrakte Klassen gefunden. Allerdings finde ich diesen Lösungsweg ziemlich dämlich wenn ich jede klasse von der Enum Klasse erben lassen muss..
Hätte das gerne ohne Verbung.

Die Abstrake Lösung wäre ja das hier:
PHP:
class Enum {
    protected $self = array();
    public function __construct( /*...*/ ) {
        $args = func_get_args();
        for( $i=0, $n=count($args); $i<$n; $i++ )
            $this->add($args[$i]);
    }
   
    public function __get( /*string*/ $name = null ) {
        return $this->self[$name];
    }
   
    public function add( /*string*/ $name = null, /*int*/ $enum = null ) {
        if( isset($enum) )
            $this->self[$name] = $enum;
        else
            $this->self[$name] = end($this->self) + 1;
    }
}

Gruß
 
Werbung:
Ich sehe nicht, wo diese Klasse abstrakt ist? Mit ArrayAccress und Iterator kannst du das fast wie einen eigenen Datentyp verwenden.

PHP6 jedenfalls wird's erstmal nicht geben.
 
ja die is jetzt nicht abstract aber sie wird an alle anderen klassen vererbt also bringts nicht so recht viel wenn man sie so nutzt

weil einfach so erreich ich das nicht das ich wenn ich

class system{}

habe das ich

per
$system = new system();
$system->ROT
$system->BLAU

die ENUMs ansprechen kann des geht nur wenn ich bei jeder klasse
class system extends enum
habe
 
Werbung:
Das sind doch vom Prinzip nur Getter und Setter. Ich sehe nicht, warum du sowas nicht entweder pro Klasse neu implementierst, bzw. einfach vererbst. Was spricht denn gegen Vererbung?
 
weil ich schon eine andere Klasse vererbe und man ja keine Mehrfachverbung erstellen kann oder doch?
und die Klasse die ich erbe implementiert ein Interface so wie ziemlich alle System Klassen in meinem CMS..
 
Es gibt leider keine Mehrfachvererbung in PHP. Du wirst also Getter und Setter für jede Klasse neu implementieren müssen. Das ist der übliche Weg, denn ich auf gehe.
 
Werbung:
Also, bislang könnte das auch das hier sein:

PHP:
class Test
{
    const ROT  = 0x01;
    const BLAU = 0x02;
}

echo Test::BLAU;

Etwas mehr Kontext?
 
Warum will man die einträge von Enum überhaupt ansprechen?

PHP:
class Enum() {
    protected $aWhitelist;
    protected $mValue;

    public function __construct() {
        $aWhitelist = func_get_args();
    }

    public function set($mValue) {
        if(!in_array($mValue, $this->aWhitelist)) {
            throw new EnumException(/* füllen | nebenbei irgendwie n ploeder name :-D */);
        }

        $this->mValue = $mValue;
    }

    public function get() {
        return $this->mValue;
    }

    public function __toString() {
        return $this->mValue;
    }
}

das sieht für mich viel mehr nach Enum aus als alles von euch ^^
 
Hmm ja also mermshaus seine Lösung mit den Konstanten passt mir eigentlich am besten..
@Slibbo ich will die ja gar nicht überschreiben ich möchte die einmal festlegen, sodass der User wenn er in meinem CMS iwelche Funktionen hinzufügen will schon "fertige" Parameter hat so wie es Sie auch in anderen Sprachen gibt.. Hätte ich eigentlich selbst auch drauf kommen können mit den Konstanten :-) aber trotzdem danke..
 
Werbung:
Du musst deine Design-Prinzipien irgendwie dokumentieren. Überprüfen könntest du sie sogar mit der Refelctions-API.
 
Dann machst du den Entwicklern das Leben aber etwas schwerer wenn ich dich richtig verstehe.
Wie wäre es wenn du das gesamte Problem ein wenig genauer beschreibst. Vielleicht habe ich ja eine noch bessere Lösung für dich. :>
 
Zurück
Oben