Einzelnen Beitrag anzeigen
  #9 (permalink)  
Alt 17.12.2011, 14:25
mermshaus mermshaus ist offline
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Du könntest die Werte dann auf Klassenebene (nicht auf Instanzebene) cachen. Das ist eine einmalige Operation pro Klasse und sollte nicht die Welt kosten.

PHP-Code:
<?php

class Foo
{
    const 
TYPE_A 'a';
    const 
TYPE_B 'b';
    const 
TYPE_C 'c';

    protected static 
$typeCache null;

    protected static function 
rebuildTypeCache()
    {
        
self::$typeCache = array();

        
$ref = new \ReflectionClass(__CLASS__);

        foreach (
$ref->getConstants() as $name => $value) {
            if (
strpos($name'TYPE_') === 0) {
                
self::$typeCache[$value] = true;
            }
        }
    }

    protected static function 
typeExists($type)
    {
        if (
self::$typeCache === null) {
            
self::rebuildTypeCache();
        }

        return 
self::$typeCache[$type];
    }

    public function 
__construct($type)
    {
        if (!
self::typeExists($type)) {
            throw new \
Exception('Illegal type specified: ' $type);
        }
    }
}

new 
Foo(Foo::TYPE_A);
new 
Foo(Foo::TYPE_B);
new 
Foo('d');
Wobei ich gerade nicht so wirklich den Gewinn der gesamten Vorgehensweise sehe. Kann man entsprechende Prüfungen nicht üblicherweise dort umsetzen, wo mit dem Wert konkret gearbeitet wird?
Mit Zitat antworten
Sponsored Links