Variable Getter?

ThiKool

Erfahrenes Mitglied
Hi gibt es die Möglichkeit getter variabel zu halten?

meine Klasse sieht z.B. so aus:

Code:
class Test
{
    private static $array= array(
        'key1' => 1,
        'key2' => 2
    );
}

ich möchte nun nicht für jeden key aus dem array einen getter schreiben die Werte aber trotzdem kompfortabel per Test::getKey1() abfragen da die meisten Werte nur stumpf ausgegeben werden sollen.

Es kann aber vorkommen das ich trotzdem mal in einen Getter logik schreiben muss also soll es dennoch möglich sein in die Klasse einen Getter hängen zu können z.B. so:

Code:
public static function getKey2()
    {
/*
MEINE LOGIK
*/
        return ;
    }

Ist sowas möglich?

Danke euch
 
Du könntest über die Magic Methoden __call und __callStatic diese Aufgabe realisieren.
__callStatic wäre es so, wie du es willst. Diese Magic Method gibt es aber erst ab PHP v5.3.

PHP:
public static function __callStatic( $functionname, $arguments ) {
   if( mb_strpos( $functionname, 'getKey' ) !== FALSE ) {
      $nr = str_replace('getKey', '', $functionname );
      return self::$array['key'.$nr];
   } elseif( mb_strpos( $functionname, 'setKey' ) !== FALSE ) {
      $nr = str_replace('setKey', '', $functionname );
      self::$array['key'.$nr] = $arguments[0];
   }
}
 
Ok danke das sieht schon sehr gut aus. Logischerweiße hat meine IDE nun keinen Bezug dazu und auch keine Autovervollständigung. Gibt es noch eine Möglichkeit die möglichen Getter noch irgendwie bekannt zu machen?

In einem Array vielleicht oder über Private Variablen?
 
Wie soll die IDE was kennen, was nicht deklariert wird? ;)

Die ein zigste Möglichkeit die mir noch einfallen würde, ist wenn man Vererbung einsetzt und die getter und setter in der Elternklasse setzt.
Dies setzt aber voraus, das die Array Keys in allen Klassen gleich sind.

PHP:
class Elternklasse {
   public static function getKey1( ) {
       return self::$array['key1'];
   }

   public static function getKey2( ) {
       return self::$array['key2'];
   }

   public static function setKey1( $value ) {
       self::$array['key1'] = $value;
   }

   public static function setKey2( $value ) {
       self::$array['key2'] = $value;
   }
}

class Test extends Elternklasse {
   private static $array= array( 'key1' => 1, 'key2' => 2 );
}
Da dies aber zu selten der Fall ist, fällt diese Variante eigentlich schon raus.
 
Noch kurz als Anmerkung: Klassenvariablen (statische Variablen statt Instanzvariablen) sollten nach Möglichkeit vermieden werden, da sie global sind, was selten die günstigste Umsetzung ist.

Wozu nutzt du diese statischen Variablen?
 
Ich erinnere mich, dass phpDocumentor eine Möglichkeit bot, solch "dynamische" Variablen in Kommentaren zu deklarieren, sodass sie später in der Dokumentation auch auftauchen. Eventuell ist deine IDE auch fähig, dies zu parsen und so in die Autovervollständigung zu integrieren.

Welche IDE nutzt du?
 
Zurück