class Main {
protected $_data;
static public function getOptions()
{
return self::$_data;
}
}
class Variant extends Main{
protected $_data = array(
'key' => 'value',
'key2' => 'value2',
'key3' => 'value3',
);
}
//NICHT SO
$variant = new Variant();
$variant->getOptions();
News:
|
class Configuration {
protected static $configuration = array();
public static function getOptions($name) {
return self::$configuration[$name];
}
public static function setOptions($name, $values) {
self::$configuration[$name] = $values;
}
}
Configuration::setOptions('A', array('a' => 1, 'b' => 'drei'));
Configuration::setOptions('B', array('b' => 70, 'c' => 'eins'));
print_r(Configuration::getOptions('A'));
echo "\n\n";
print_r(Configuration::getOptions('B'));
echo "\n\n";
$b = Configuration::getOptions('B');
echo $b['b'];
|
Sauber genau das brauchte ich!
– spiike 24.01.2013
|
||
Aber warte mal...
Du hast schon recht, ich möchte verschiede Configurationen damit steuern. Geh mal von Select-Feldern aus: Klasse Geschlecht extends StaticMethods die Methoden sollen in "StaticMethods" deklariert werden, aber in Geschlecht sollen die Daten gesetzt werden. Wie soll ich das dann mit deiner Methode machen? – spiike 24.01.2013
|
||
Bei dem Regestry-Ansatz wird eben keine Vererbung verwendet. Statt Geschlecht extends StaticMethods müsstest Du StaticMethods::setOptions('Geschlecht', array(...)); schreiben.
Ich bekomme gerade das ungute Gefühl, dass wir eine etwas unterschiedliche Auffassung von Konfigurationen haben. Kannst du mal etwas konkreter Beschreiben was dein Ziel ist bzw. wie Deine Klasse(n) verwendet werden sollen? – phg 24.01.2013
|
|
|
Das ist mir schon alles bewusst was ihr sagt, es geht auch nicht. self::$_data kann auch nicht aufgerufen werden, solange sie nicht static ist.
Mein Problem ist ja, das es aber trotzdem irgendwie gerne hinbekommen möchte mit der Vererbung den Aufruf so zu Starten das ich nur noch Variant::getOptions() tippen muss, ohne in jeder Klasse die Methoden neu zu schreiben. – spiike 24.01.2013
|
||
Gibt es irgendeinen Grund, warum Du nicht Main::getOptions() schreiben willst/kannst?
– Matthias Hlawatsch 24.01.2013
|
||
Ja den gibts. Ich will doppelten Code vermeiden. Ich will ja auch die Methoden von Main per static zugreifen, aber die eigentlichen Daten erst in der Variant setzten.
Das Beispiel ist vlt. nicht gerade prädestiniert dafür. Es geht darum, dass ich nachher 30 Klassen habe die von der Main ableiten, in den 30 Klassen steht halt immer ein anderer Array inhalt... und da würde ich gern statisch drauf zu greifen... aber ich glaube das geht so nicht.... – spiike 24.01.2013
|
<?php
abstract class Main
{
static abstract public function getOptions();
}
class Variant extends Main
{
static public function getOptions()
{
return array(
'key' => 'value',
'key2' => 'value2',
'key3' => 'value3',
);
}
}
$mike = Variant::getOptions();
var_dump($mike);
|
...
protected static $_data;
static public function getOptions() {
$called = get_called_class();
return $called::$_data;
}
...
|